問題タブ [ngen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2010 - NGEN されたアセンブリが読み込まれない
アセンブリを NGEN する場合とそうでない場合のパフォーマンスへの影響を測定しようとしていますが、実行可能ファイルに NGEN アセンブリをロードさせることができません。VS2010 コマンド プロンプトから次のコマンドを実行しました。
これは問題なく完了し、すべての依存関係アセンブリが C:\Windows\assembly\NativeImages_v4.0.30319_32\MyCompanyName# ディレクトリに作成されていることを確認しました。
その後、アプリを起動して Process Explorer を見ると、NativeImages_x フォルダーから *.ni.dll ファイルを読み込むのではなく、ローカル バイナリ ディレクトリからすべてのアセンブリを読み込んでいました。fuslogvw を使用してバインディングをログに記録しました。サンプル ログ エントリは次のとおりです。
ここで何が起こっているのかについて考えている人はいますか?問題のネイティブ アセンブリが次の場所に存在することを確認しました。
正しくバインドされていないのはなぜですか?FWIW、アプリケーションは MEF をかなり使用します。それがアセンブリの読み込みに影響するかどうかはわかりません。
.net - ネイティブ コードの生成
.Net 4.0 でのネイティブ コード生成は初めてです。私のプロジェクトでは、1 つの EXE ファイルに対して合計 500 以上の DLL ファイルがあります。ngen.exe インストールを使用してこれらすべての DLL のネイティブ イメージを作成する必要がある場合、それは大きなプロセスになります。したがって、私の質問は、これらすべての DLL ファイルのネイティブ イメージを作成するためのツールまたはスクリプトがあるかどうかです。この問題で私を助けてください。
前もって感謝します。、
c# - ngen.exeを使用してカーネルをコンパイルする
CosmosとSharpOSが独自のコンパイラを作成してC#からバイナリコードを構築していることは理解していますが、Microsoftの.NET AOTを使用して同じことを行うことはできますか?C#をx86にコンパイルします。ステートメントを含める場合は、OS開発のように、ステートメントの使用を省略しなければならないと思います。フィードバックをいただければ幸いです。ありがとう
編集:カーネル開発でC#を使用したい主な理由は、マネージコードがもたらすメモリ管理、特に単一のアドレス空間プロパティのためです。JITコンパイラを起動してから、C#をコンパイルする必要がありますか?それとも、その時点で環境はまだ機能不全に陥っていますか?フィードバックをありがとう
.net - .Netネイティブイメージを検査/分解します
.Net JITer / ngenによって生成されたネイティブコードを逆アセンブル/検査することは可能ですか?(純粋に学術的な目的のために)
この質問に答えようとすると、JITerがどのような最適化を実行するのか興味をそそられました。大げさに推測するのではなく、実際に何が起こっているのかを自分で確認できるようにしたいと思います。
これまでのところ:
- ngenを使用して候補アセンブリのネイティブイメージをインストールしました(これの出力は、JITコンパイラの出力とは異なる可能性がありますか?)
- GACからネイティブイメージをコピーしました
しかし、今は少し行き詰まっています-.Netアセンブリはポータブルで実行可能な形式ですが、そのようなファイル(objdump)を逆アセンブルするために使用する可能性のある通常のツールはbarfだけです:
このようにネイティブ画像の内部を覗くのは可能ですか?それが失敗すると、好奇心を満たすことができるかもしれない別の方法がありますか?(たとえば、実行中のプロセスでコードを逆アセンブルする)
.net - ネットワーク上で実行されている.Netdllの数を減らす方法
多数の.dllファイルを含む.NetFramework4ソフトウェアソリューションがあります。
これらのファイルはネットワークサーバーでホストされ、共通のリモートフォルダー上のクライアントから実行されます。
このサーバーフォルダ内の.dllファイルの数を減らしたいと思います。
いくつかの質問が発生します:
- 大きなマージされた.dllは、多数の小さな.dllよりも起動/実行が遅くなりますか?
- クライアントごとに最適化するために、ネットワークライブラリファイルよりもNGenを使用する利点はありますか?
これらの.dllのほとんどは、実際には32ビットのアンマネージコードからCOM表示インターフェイスを介して呼び出されます。
.net - NGen で処理されたアセンブリを (ILDasm を使用して) 逆アセンブルできますか?
アセンブリをNGenした場合、ildasmがまだそれを逆アセンブルするのは正常ですか?
Ok。私は HelloWorld クラス ライブラリを作成しました。その後の dll は NGenILDasmTest.dll という名前です。--> .Net fw 4 を対象としています。
Vs 2010コマンドプロンプトから、私はやった
アセンブリが GAC にインストールされているのが見えました。そして、ildasm を実行して、IL を表示できるようにしました。ここまでは順調ですね。
それから私は走ります
(ngen のオプションは指定しませんでした)。そして、このアセンブリは正常にコンパイルされました。フォルダーの下に NGenILDasmTest.ni.dll という名前で配置しました
さて、以下のようにildasmを実行すると
Ngen-ed アセンブリの内容を見ることができました。これは正常ですか?
技術的に言えば、Ngen は IL のネイティブ CPU 命令を生成します (私の場合は C:\windows\Assembly\NAtiveImages_V4.#####_32 の下にあるようです)。その場合、ILDasm を使用して、NGen で処理されたアセンブリを IL として表示するにはどうすればよいですか?
私がここで見逃している「ちょっとしたこと」を理解するのを手伝ってください。
.net - NGenエラーはランタイムエラーをロードできませんでした
.NET Framework 4のNGenを使用して一連のDLLアセンブリをコンパイルすると、奇妙なエラーが発生しました。インストールは一部のDLLで機能しましたが、他のDLLでは次のエラーメッセージが表示されました。
ランタイムのロードに失敗しました。(HRESULTからの例外:0x80131700)。アセンブリAseemblyFileLocationを実行するには、ランタイムのバージョンv4.0.30319が必要です。正しいランタイムがインストールされると、アセンブリがコンパイルされます。
私は正しいランタイムバージョンを持っていると確信しています。ウェブで答えを検索してみたところ、誰もこれに出くわしていなかったことがわかりました。これはさらに奇妙なことです。
これに関するリードはありますか?ありがとう。
visual-studio - 「ngeninstall.../ profile」を使用すると、IntelliTraceが正しく機能しなくなります
.NETFrameworkのプロファイルされたネイティブイメージから大きなメリットを得るアプリケーションを開発しています。そのため、インストール中に、いくつかの.NETアセンブリで次のコマンドを実行しています。
ngen install "ASSEMBLY NAME" /Profile
アプリケーションを展開した直後に、VisualStudio2010のユーザーのIntelliTrace機能が機能しなくなったという苦情を受けました。簡単な調査の結果、 mscorlib.dllのプロファイリングネイティブイメージが作成されるとすぐに、IntelliTraceが機能しなくなることがわかりました。また、それが発生すると、イベントビューアに次のメッセージが表示されます。
TraceLog Profilerは、プロセスにロードされたNGEN/profileアセンブリを検出しました。このようなアセンブリはサポートされていません。コレクションは無効になります。
mscorlib.dllは他の.NETアセンブリの依存関係であるため、これは特に厄介です。つまり、ngen install ... /profile
任意のアセンブリで使用すると、mscorlib.dllも生成されます。
以下は、問題の簡単な複製です。
新しいコンソールアプリケーションを作成し、そのターゲットフレームワークを.NET 2に設定します。イメージに表示されているコードを追加し、SomeFunctionの後にブレークポイントを設定します。
IntelliTraceを「IntelliTraceイベントと通話情報」に設定します
デバッグを開始します。ブレークポイントに到達すると、次の正しいIntelliTraceを取得する必要があります。
デバッグを停止し、VisualStudioを終了します。
- 昇格モードで新しいcmd.exeを開きます
- 実行する:
%windir%\Microsoft.NET\Framework\v2.0.50727\ngen install "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /Profile
- Visual Studioを再度起動し、デバッグを開始します。同じブレークポイントがヒットします。ただし、今回は、IntelliTraceは次のようになります。
- IntelliTraceを同じcmdウィンドウで再度実行するには:
%windir%\Microsoft.NET\Framework\v2.0.50727\ngen uninstall "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /Profile
また、ngen.exeの/ NoDependenciesフラグを使用して、mscorlibなしで特定のアセンブリのみを追加しようとしましたが、フラグは無視されているようです-実行したにもかかわらずngen install ... /Profile /NoDependencies
、依存関係がインストールされています。実行ngen display | find "<profiling>"
すると、mscorlibが明らかになります。 / NoDependenciesフラグが使用された場合でも、はインストールされたままです。
質問
- 他のngen/profileアセンブリがインストールされている場合でも、mscorlib / profileをNGENでアンインストールする方法はありますか?
- NGen / Profileの実行後にIntelliTraceを正しく機能させるための回避策はありますか?
- / NoDependenciesフラグが期待どおりに機能しないのはなぜですか?
ありがとう、ヴィタリー・ベルマン