CLRおよびC ++

大量のデータを扱う大規模プロジェクトでのCLRおよびC ++の適用性に関するトピック。





だから。 ILにコンパイルされたアプリケーションコードを読み込むと、CLRは生成されたマシンコードファイルNGen.exeの存在を確認します。 このファイルが与えられ、その特性の一部が正常にチェックされると、メソッドのJITコンパイルは実行されず、環境はこのソースからコンパイルされたメソッドをロードします。 NGenファイルを使用することの欠点は何ですか?

1.おそらく最も基本的な欠点は、ベースアドレスとバインドを変更する時間の損失です。

私たちが行う製品は、特定の理由により、過剰な大食いを特徴とし、提供されたメモリの最大量を使い果たす傾向があるため、可能であれば、この問題はかなり急激に発生します。 6万行のモジュールのベースアドレスを変更するテストを実施することは興味深いでしょう。

2. NGenユーティリティは、ランタイムに関する情報が不足しているため、平均的なコードを作成します。

しかし、C ++では同じ問題に直面しているため、この問題を詳細に検討することはしません。



次に、NGenファイルがない場合のJITコンパイラの作業について説明します。 アプリケーションメソッドに最初にアクセスすると、CLRはILコードの指定されたセクションにアクセスし、メソッドのJust-In-Timeコンパイルを実行します。 コンパイル時には、マシンの現在のハードウェア構成に応じて最適化が使用されます。 さらに、使用されている型と呼び出されたメソッドのIL検証がコンパイル中に行われます。 コンパイル後、JITコンパイラは内部データ構造に戻り、ILコード内のメソッドアドレスをマシン命令ブロックのアドレスに置き換え、制御をコードに渡します。 このブロックは、プログラムが終了するまでメモリに保存され、以降のすべての呼び出しはこのメモリブロックにリダイレクトされます。



プロジェクトが多数のメソッドを使用し、アルゴリズムの最初の実行中の待機時間が大幅に増加しない限り、これはすべて正常であり、理想的には非常に優れたパフォーマンスを提供できます。



All Articles