タグ付けされた質問 「clr」

Common Language Runtime(CLR)は、Microsoftの.NETイニシアチブのコアコンポーネントです。これは、プログラムコードの実行環境を定義する共通言語インフラストラクチャ(CLI)標準のMicrosoftの実装です。CLRでは、コードはCommon Intermediate Language(CIL、以前はMSILと呼ばれていたMicrosoft Intermediate Language)と呼ばれるバイトコードの形式で表現されます。

5
コードを高速化してみてください。
try-catchの影響をテストするためにいくつかのコードを書きましたが、驚くべき結果がいくつかありました。 static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); elapsed …

16
MSB3247の解決-同じ依存アセンブリの異なるバージョン間で競合が見つかりました
.NET 3.5ソリューションは、msbuildでコンパイルすると、この警告で終了しました。 NDependが役立つ場合がありますが、この場合、それ以上の詳細は提供されませんでした。ボブと同様に、依存アセンブリの古いバージョンを参照しているアセンブリが見つかるまで、ILDASMで各アセンブリを開く必要がありました。 私はVS 2010 Beta 2からMSBUILDを使用しようとしました(Connectの記事で、これはCLRの次のバージョンで修正されたと示されています)が、それ以上の詳細情報は提供されていません(Beta 2以降で修正された可能性があります)。 より良い(より自動化された)アプローチはありますか?
427 .net  msbuild  clr  ndepend 

18
CLRでのキャストと「as」キーワードの使用
インターフェイスをプログラミングするとき、キャストやオブジェクトタイプの変換をたくさん行っていることがわかりました。 これらの2つの変換方法に違いはありますか?もしそうなら、費用の違いはありますか、またはこれは私のプログラムにどのように影響しますか? public interface IMyInterface { void AMethod(); } public class MyClass : IMyInterface { public void AMethod() { //Do work } // Other helper methods.... } public class Implementation { IMyInterface _MyObj; MyClass _myCls1; MyClass _myCls2; public Implementation() { _MyObj = new MyClass(); // What is the difference here: …
387 c#  casting  clr 


10
「as」およびnull許容型によるパフォーマンスの驚き
null許容型を扱うC#in Depthの第4章を改訂し、 "as"演算子の使用に関するセクションを追加して、次のように記述できるようにします。 object o = ...; int? x = o as int?; if (x.HasValue) { ... // Use x.Value in here } 私はこれが本当に素晴らしいと思い、 "is"に続けてキャストを使用することで、C#1と同等のパフォーマンスを向上させることができると思いました。 。 ただし、そうではないようです。以下にサンプルテストアプリを含めました。これは基本的にオブジェクト配列内のすべての整数を合計しますが、配列には多くのnull参照と文字列参照、およびボックス化された整数が含まれています。ベンチマークは、C#1で使用する必要があるコード、「as」演算子を使用するコード、およびLINQソリューションのキックを測定します。驚いたことに、この場合、C#1コードは20倍高速です。また、LINQコード(イテレータが関与していることを考えると、遅くなることが予想されていました)でも「as」コードよりも優れています。 isinstnull許容型の.NET実装は本当に遅いのですか?unbox.any問題の原因は追加ですか?これには別の説明がありますか?現時点では、パフォーマンスに敏感な状況でこれを使用することに対する警告を含める必要があるように思われます... 結果: キャスト:10000000:121 As:10000000:2211 LINQ:10000000:2143 コード: using System; using System.Diagnostics; using System.Linq; class Test { const int Size = 30000000; static void Main() …

15
.NETのAPIを壊す変更への決定的なガイド
.NET / CLRでのAPIのバージョン管理、特にAPIの変更がクライアントアプリケーションに影響する、または影響しない方法に関する情報をできるだけ多く収集したいと考えています。まず、いくつかの用語を定義しましょう: APIの変更 -パブリックメンバーを含む、タイプの公に見える定義の変更。これには、タイプとメンバー名の変更、タイプの基本タイプの変更、タイプの実装済みインターフェースのリストからのインターフェースの追加/削除、メンバーの追加/削除(オーバーロードを含む)、メンバーの可視性の変更、メソッドとタイプパラメーターの名前変更、デフォルト値の追加が含まれますメソッドパラメーター、型とメンバーの属性の追加/削除、および型とメンバーのジェネリック型パラメーターの追加/削除(何か見落としましたか?)これには、メンバー組織の変更やプライベートメンバーの変更は含まれません(つまり、リフレクションは考慮されません)。 バイナリレベルのブレーク -APIの変更により、古いバージョンのAPIに対してコンパイルされたクライアントアセンブリが、新しいバージョンで読み込まれない可能性があります。例:メソッドシグネチャを変更します。以前と同じ方法で呼び出すことができます(例:voidでタイプ/パラメータのデフォルト値のオーバーロードを返す)。 ソースレベルのブレーク -APIの変更により、古いバージョンのAPIに対してコンパイルするように記述された既存のコードが、新しいバージョンでコンパイルされない可能性があります。ただし、コンパイル済みのクライアントアセンブリは以前と同様に機能します。例:以前はあいまいでなかったメソッド呼び出しにあいまいさをもたらす可能性がある新しいオーバーロードを追加します。 ソースレベルの静かなセマンティクスの変更-APIの変更により、古いバージョンのAPIに対してコンパイルするように作成された既存のコードは、たとえば別のメソッドを呼び出すことによって、そのセマンティクスを静かに変更します。ただし、コードは警告/エラーなしでコンパイルを続行し、以前にコンパイルされたアセンブリは以前と同様に機能するはずです。例:既存のクラスに新しいインターフェースを実装すると、オーバーロードの解決時に別のオーバーロードが選択されます。 最終的な目標は、可能な限り多くの破壊的で静かなセマンティクスAPIの変更をカタログ化し、破壊の正確な影響と、影響を受ける言語と影響を受けない言語を説明することです。後者について詳しく説明します。一部の変更はすべての言語に普遍的に影響します(たとえば、新しいメンバーをインターフェイスに追加すると、そのインターフェイスの実装が任意の言語で機能しなくなります)。これには、最も一般的にはメソッドのオーバーロードが含まれ、一般に、暗黙的な型変換に関係するすべての処理が含まれます。CLS準拠の言語(つまり、少なくともCLI仕様で定義されている「CLSコンシューマー」のルールに準拠している言語)であっても、「最小公分母」を定義する方法はないようです。ここで誰かが私を間違っていると訂正してくれれば感謝します-したがって、これは言語ごとに行われる必要があります。最も興味深いのは、当然、.NETに付属しているもので、C#、VB、F#です。しかし、IronPython、IronRuby、Delphi Prismなどのその他のものも関連します。それがコーナーケースであるほど、それはより興味深いものになります-メンバーの削除などのことはかなり自明ですが、たとえばメソッドのオーバーロード、オプション/デフォルトのパラメーター、ラムダ型の推論、および変換演算子の間の微妙な相互作用は非常に驚くことができます時には。 これをキックスタートするいくつかの例: 新しいメソッドオーバーロードの追加 種類:ソースレベルの区切り 影響を受ける言語:C#、VB、F# 変更前のAPI: public class Foo { public void Bar(IEnumerable x); } 変更後のAPI: public class Foo { public void Bar(IEnumerable x); public void Bar(ICloneable x); } 変更前に機能し、その後壊れたサンプルクライアントコード: new Foo().Bar(new int[0]); 新しい暗黙の変換演算子のオーバーロードを追加する 種類:ソースレベルの区切り。 影響を受ける言語:C#、VB 影響を受けない言語:F# 変更前のAPI: public …

7
C#とJavaの主な違いは何ですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 一つだけ明確にしたいことがあります。これはどちらが優れているかという問題ではありません。その部分については、他の誰かに話し合ってもらいます。気にしない。私は就職の面接でこの質問をされてきましたが、もう少し学ぶことが役立つと思いました。 これらは私が思いつくことができるものです: Javaは「プラットフォーム非依存」です。まあ今日では、MonoプロジェクトがあるのでC#も考えられますが、少々大げさだと思います。どうして?さて、Javaの新しいリリースが行われると、Javaがサポートするすべてのプラットフォームで同時に利用可能になります。一方で、Mono実装にはまだいくつのC#3.0の機能がありませんか?それとも、ここで比較する必要があるのは本当にCLR対JREですか? Javaはイベントとデリゲートをサポートしていません。私の知る限りでは。 Javaでは、すべてのメソッドが仮想です 開発ツール:Visual Studioのようなツールはまだないと思います。特に、チームエディションを使用している場合は、私が何を意味するかがわかります。 関連性があると思われるものを追加してください。 更新:頭に浮かんだばかりですが、Javaにはクラスやメソッドなどにカスタム属性のようなものはありません。それともそうですか?
209 c#  .net  clr  java 

20
C#やVB.NETではできないMSILでできることは何ですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 .NET言語で記述されたすべてのコードはMSILにコンパイルされますが、MSILを直接使用してのみ実行できる特定のタスク/操作はありますか? MSILでは、C#、VB.NET、F#、j#、その他の.NET言語よりも簡単に処理を実行できます。 これまでのところこれがあります: テール再帰 ジェネリックCo / Contravariance 戻り型のみが異なるオーバーロード アクセス修飾子を上書きする System.Objectから継承できないクラスがある フィルタリングされた例外(vb.netで実行できます) 現在の静的クラス型の仮想メソッドを呼び出します。 値型のボックス版のハンドルを取得します。 try / faultを実行します。 禁止された名前の使用。 値型の独自のパラメーターなしのコンストラクターを定義します。 raise要素でイベントを定義します。 CLRでは許可されているが、C#では許可されていない一部の変換。 非main()メソッドをとして作成し.entrypointます。 ネイティブとの仕事intとネイティブunsigned intに直接タイプ。 一時的なポインタで遊ぶ MethodBodyItemのエミッタバイトディレクティブ System.Exception以外のタイプをスローしてキャッチする 列挙型の継承(未検証) バイトの配列を(4倍小さい)intの配列として扱うことができます。 フィールド/メソッド/プロパティ/イベントにすべて同じ名前を付けることができます(未確認)。 独自のcatchブロックからtryブロックに戻ることができます。 famandassemアクセス指定子にアクセスできます(protected internalfam または assemです) <Module>グローバル関数を定義するためのクラス、またはモジュール初期化子への直接アクセス。
165 c#  .net  clr  cil 

3
.NET 4.5ベータ版で、このFatalExecutionEngineErrorの原因は何ですか?[閉まっている]
この質問が今後の訪問者を助けることはほとんどありません。それは、地理的に狭い地域、特定の瞬間、またはインターネットの世界中の視聴者に一般に適用できない非常に狭い状況にのみ関連しています。この質問をより広く適用できるようにするには、ヘルプセンターにアクセスしてください。 7年前休業。 以下のサンプルコードは自然に発生しました。突然私のコードは非常に厄介なサウンドのFatalExecutionEngineError例外を出しました。私は犯人のサンプルを分離して最小化するために30分間を費やしました。Visual Studio 2012をコンソールアプリとして使用してこれをコンパイルします。 class A<T> { static A() { } public A() { string.Format("{0}", string.Empty); } } class B { static void Main() { new A<object>(); } } .NET Framework 4および4.5でこのエラーが発生するはずです。 これは既知のバグですか?原因は何ですか?それを軽減するために何ができますか?私の現在の回避策はを使用しないことstring.Emptyですが、私は間違った木を吠えていますか?そのコードについて何かを変更すると、期待どおりに機能します。たとえば、の空の静的コンストラクターを削除しAたり、型パラメーターをからobjectに変更したりしintます。 私のラップトップでこのコードを試したところ、文句はありませんでした。しかし、メインアプリを試してみたところ、ラップトップでもクラッシュしました。問題を減らすとき、私は何かを壊したにちがいない、私はそれが何であったかを理解できるかどうか見るでしょう。 私のラップトップは、フレームワーク4.0で上記と同じコードでクラッシュしましたが、4.5でもメインクラッシュしました。どちらのシステムも、最新の更新を適用したVS'12を使用しています(7月?)。 詳細: ILコード(コンパイルされたデバッグ/任意のCPU / 4.0 / VS2010(そのIDEは重要ではありませんか?)):http ://codepad.org/boZDd98E VS 2010と4.0では見られません。最適化あり/なしでクラッシュしない、異なるターゲットCPU、デバッガーが接続されている/接続されていない、など-Tim Medora AnyCPUを使用すると2010年にクラッシュしますが、x86では問題ありません。プラットフォームターゲット= AnyCPUを使用してVisual Studio 2010 …
150 c#  clr 

2
デバッガーで.NET言語を正しくステップ実行する
まず、この質問が長く続いたことをお詫び申し上げます。 私はIronSchemeの作者です。最近私は「ネイティブ」の.NETデバッガーを使用できるように、まともなデバッグ情報を出力するように努力しています。 これは部分的に成功していますが、歯が生える問題に直面しています。 最初の問題はステッピングに関連しています。 Schemeが式言語であるため、ステートメント(または行)ベースのように見える主要な.NET言語とは異なり、すべてが括弧で囲まれる傾向があります。 元のコード(Scheme)は次のようになります。 (define (baz x) (cond [(null? x) x] [(pair? x) (car x)] [else (assertion-violation #f "nooo" x)])) 私はわざとそれぞれの表現を改行でレイアウトしています。 生成されたコードは(ILSpyを介して)C#に変換されます。 public static object ::baz(object x) { if (x == null) { return x; } if (x is Cons) { return Builtins.Car(x); } return #.ironscheme.exceptions::assertion-violation+( RuntimeHelpers.False, "nooo", …

4
構造体の整列がフィールドタイプがプリミティブであるかユーザー定義であるかに依存するのはなぜですか?
で野田時間 v2では、我々はナノ秒の解像度に移動しています。つまり、関心のある時間の範囲全体を表すのに8バイト整数を使用できなくなったということです。そのため、野田時間の(多くの)構造体のメモリ使用量を調査するようになりました。 CLRの配置の決定におけるわずかな奇妙さを明らかにするため。 まず、これは実装の決定であり、デフォルトの動作はいつでも変更される可能性があることを理解しています。とを使用して変更できることを理解していますが、可能であればそれを必要としないソリューションを考え出します。[StructLayout][FieldOffset] 私の中心的なシナリオはstruct、参照タイプのフィールドと他の2つの値タイプのフィールドを含むaがあり、これらのフィールドがint。。私はそれが64ビットCLRで16バイトとして表されることを期待していましたが(参照用に8バイト、他のそれぞれに4バイト)、何らかの理由で24バイトを使用しています。ちなみに私は配列を使用してスペースを測定しています-レイアウトは状況によって異なる場合があることは理解していますが、これは妥当な出発点のように感じました。 これは問題を示すサンプルプログラムです: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } struct TwoInt32s { int x, y; } struct TwoInt32Wrappers { Int32Wrapper x, y; } struct RefAndTwoInt32s { string text; int x, y; } struct RefAndTwoInt32Wrappers { string text; Int32Wrapper x, …

6
プラス記号を使用すると、いくつの文字列オブジェクトが作成されますか?
以下のコードでプラス記号を使用すると、いくつの文字列オブジェクトが作成されますか? String result = "1" + "2" + "3" + "4"; 以下のような場合、「1」、「2」、「12」の3つのStringオブジェクトを指定します。 String result = "1" + "2"; Stringオブジェクトは、パフォーマンス向上のためにString Intern Pool / Tableにキャッシュされることも知っていますが、それは問題ではありません。
115 c#  string  clr 

5
なぜ大きなオブジェクトヒープであり、なぜ私たちは気にするのですか?
ジェネレーションとラージオブジェクトヒープについて読みました。しかし、私はまだ大きなオブジェクトヒープを持つことの重要性(または利点)が何であるか理解できませんか? ラージオブジェクトを格納するためにCLRがジェネレーション2(Gen0およびGen1のしきい値が小さいことを考慮すると)に依存している場合、(パフォーマンスまたはメモリの観点から)何が問題になっている可能性がありますか?

2
C#のスタックサイズがちょうど1 MBなのはなぜですか?
今日のPCには大量の物理RAMがありますが、それでも、C#のスタックサイズは32ビットプロセスの場合は1 MB、64ビットプロセスの場合は4 MBです(C#のスタック容量)。 CLRのスタックサイズがまだ非常に制限されているのはなぜですか? そして、なぜそれがちょうど1 MB(4 MB)であるのですか(2 MBや512 KBではないのですか)なぜこれらの金額を使用することにしたのですか? その決定の背後にある考慮事項と理由に興味があります。
102 c#  stack  clr  stack-size 

8
C#の「is」演算子のパフォーマンス
高速なパフォーマンスを必要とするプログラムがあります。その内部ループの1つで、オブジェクトのタイプをテストして、特定のインターフェイスから継承するかどうかを確認する必要があります。 これを行う1つの方法は、CLRの組み込み型チェック機能を使用することです。最もエレガントな方法はおそらく「is」キーワードです。 if (obj is ISpecialType) 別のアプローチは、事前定義された列挙値を返す独自の仮想GetType()関数を基本クラスに与えることです(私の場合、実際には私はブール値のみが必要です)。その方法は高速ですが、エレガントではありません。 「is」キーワード専用のIL命令があると聞いたことがありますが、ネイティブアセンブリに変換したときに高速に実行されるわけではありません。「is」のパフォーマンスと他のメソッドのパフォーマンスについて洞察を共有できる人はいますか? 更新: すべての情報に基づいた回答をありがとう!答えの中にはいくつかの役立つポイントが広がっているようです。Andrewが「自動的にキャストを実行する」というポイントは不可欠ですが、Binary WorrierとIanが収集したパフォーマンスデータも非常に役立ちます。回答の1つがこの情報のすべてを含むように編集されているとすばらしいでしょう。
102 c#  performance  clr  gettype 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.