問題タブ [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.
c# - ASP.NET が動作している NGen を取得できません
ASP.NET アプリケーションで NGEN を使用して、起動時間を改善しようとしています。(これが理想的な解決策ではないことは承知していますが、調査するよう求められています)
ターゲット DLL に対して nGEN を実行すると、「すべてのコンパイル ターゲットは最新です」というメッセージが表示されます。
ただし、アプリケーションを起動し、Assembly Binding Log Viewer (ログ カテゴリのネイティブ イメージにチェックマークを付ける) を使用して、これが機能しているかどうかを確認しようとすると、アプリケーションが一覧表示されず、機能していないことが示唆されます。何らかの理由で。
明らかな何かが欠けていると確信しています.NGENイメージが使用されているかどうかを確認できる方法を知っている人はいますか?
c# - .NET 実行可能ファイルを使用した NGEN x86 と x64 の比較
次の質問があります。
.NET アセンブリが x86 モードでコンパイルされています。x64 Windows システムで NGEN のパフォーマンス上の利点を引き続き活用できますか? x86 アセンブリは x64 でネイティブ コードにコンパイルされますか?
.net - .NET - NGEN コンパイル x86 アセンブリ
これは、この質問のフォローアップです。
.NET 実行可能ファイルを使用した NGEN x86 と x64 の比較
カスタム セットアップ アクションを使用して NGEN を実行できることはわかっていますが、私は Inno Setup を使用しているため、手動で行う必要があります。
質問: アセンブリが x86 モードでコンパイルされている場合、常に x86 バージョンの ngen.exe を使用する必要がありますか、または OS (x86 Windows では x86 ngen.exe、x64 Windows では x64 ngen.exe) に応じて使用する必要がありますか?
問題は、NGEN のインストールで次のエラーが発生することです。
アセンブリ C:\Program Files\MyApp\MyApp.exe をコンパイルしています (CLR v4.0.30319) ... 01/15/2012 15:05:28 [2432]: 1>C:\Program Files\MyApp\MyApp のコンパイル中にエラーが発生しました。 exe: このバージョンの は、実行中の Windows のバージョンと互換性がありません。コンピューターのシステム情報を調べて、プログラムの x86 (32 ビット) または x64 (64 ビット) バージョンが必要かどうかを確認してから、ソフトウェアの発行元に問い合わせてください。(HRESULT からの例外: 0x800700D8)
理想的には、メイン アセンブリ (x86) とそのすべての依存関係 (x86 と AnyCPU の混合ビルド) をネイティブ コードにコンパイルしたいと考えています。
お知らせ下さい。
winforms - セットアップおよび展開プロジェクトによる nGen EXE +DLL
メインアプリケーションEXEをnGenする必要がある次のコードがあります。
私が必要とするのは、EXE が nGen されるだけでなく、参照されるすべての DLL (私のソリューション全体) も nGen されることです。
私のEXEプロジェクトが呼び出されたとしましょう:
そして、それはこれらに依存します:
ソリューション内の唯一の展開プロジェクトを介してこれらを nGen するにはどうすればよいですか?
ありがとう。
c# - ngen によって作成されたネイティブ イメージの GAC ファイル パス
NGen は、次のようなパスの下の GAC にファイルを作成します。
C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\ca87ba84221991839abbe7d4bc9c6721\mscorlib.ni.dll
GUID はどこから派生したものですか? アセンブリの MVID に関連していますか?
関連する質問がありますが、この詳細を見逃しています。私は別のものを逃したかもしれません
参考までに、これは、windbg を使用して同じ dll バージョンが 2 台のマシンにロードされていることを確認しているときに発生しました。
clickonce - 顧客がする必要がないようにNGenイメージを事前生成することは可能ですか?
ClickOnceを介して配布されるアプリは、起動に平均10.8秒かかります。(ClickOnceがインストールされたディレクトリ内の).exeで実行した後、平均6.4秒ngen
で起動します。これは明らかに大幅な高速化(40%)であり、可能であればngen-ificationを利用したいと思います。
ClickOnceデプロイメントでNGenを使用することは可能ですか?に対するRonの回答 は、Windows XPを実行していると仮定して、顧客のマシンでどのように実行できるかを示しています。これは、Windows 7ボックスの管理者権限が必要なため、一般的な解決策とは思えません。
さらに、ngenは、そのアプリに属するすべてのアセンブリをコンパイルするために私のボックスで40秒かかります。
理想的には、ビルドプロセスの一部として、すべての(主要な)アーキテクチャ用にアプリを事前に生成して、ユーザーが「管理者として実行してもよろしいですか?」ポップアップしてから40秒待ちます。
それは可能ですか?
c# - .NET JIT コンパイルのパフォーマンス (動的メソッドを含む) は、C# コンパイラのイメージ デバッグ オプションによってどのように影響を受けますか?
起動直後にアプリケーションが適切に動作するように、アプリケーションを最適化しようとしています。現在、そのディストリビューションには 304 個のバイナリ (外部依存関係を含む) が含まれており、合計で 57 メガバイトになります。これは、重要な計算を行わずに、主にデータベース アクセスを行う WPF アプリケーションです。
ほとんどの操作は、アプリケーションのプロセスの存続期間中に初めて実行されるため、Debug 構成の方がはるかに優れた (最大 5 倍のゲイン) 時間を提供することがわかりました。たとえば、アプリ内で特定の画面を開くには、NGENed Debug で 0.3 秒、JITted Debug で 0.5 秒、NGENed Release で 1.5 秒、JITted Release で 2.5 秒かかります。
JIT コンパイル時間のギャップは、リリース バイナリに対してより積極的な最適化を適用する JIT コンパイラによって引き起こされることを理解しています。私が知る限り、デバッグ構成とリリース構成は、C# コンパイラに渡される/p:DebugType
およびスイッチによって異なりますが、アプリケーションをビルドした場合でも、同じパフォーマンス ギャップが見られます。つまり、 と同じイメージ デバッグ オプションです。/p:Optimize
/p:Configuration=Release /p:DebugType=full /p:Optimize=false
/p:Configuration=Debug
DebuggableAttribute
結果のアセンブリに適用された を見て、オプションが適用されたことを確認します。NGEN の出力を観察すると、<debug>
コンパイルされているいくつかのアセンブリの名前に追加されていることがわかります。NGEN はデバッグ アセンブリと非デバッグ アセンブリをどのように区別しますか? テスト対象の操作は動的コード生成を使用しています。動的コードにはどのレベルの最適化が適用されていますか?
注: 外部依存関係のため、32 ビット フレームワークを使用しています。x64 では異なる結果が期待できますか?
注: 条件付きコンパイルも使用しません。したがって、コンパイルされたソースは両方の構成で同じです。
.net - ビルド間で MPGO データを永続化できますか?
MPGO (Managed Profile Guided Optimization) に関する投稿を読みましたが、説明されているプロセスは次のとおりです。
- Visual Studio 11 Ultimate Beta とアプリケーションがインストールされたマシンを入手します。
- 必要なパラメーターを使用して (管理者として) MPGO ツールを実行します。
MPGO -scenario MyLargeApp.exe -AssembyList *.* -OutDir C:\Optimized\
最適化された IL アセンブリがC:\Optimized
フォルダーに作成されます。 - 各アプリケーション DLL に必要なパラメーターを指定して、NGen ツールを (管理者として) 実行します。
NGEN.exe myLargeApp.exe
- アプリケーションを実行します。最適化されたネイティブ イメージが使用されます。
これは、リリースされた製品に入るバイナリでガイド シナリオを実行する必要があることを意味しているようです。
ビルド プロセス中に手動での介入が必要であることは、私には理解できません。ガイド シナリオを 1 回実行してから、生成されたデータをコミットして、将来のビルドでコンパイル済みアセンブリに自動的に挿入されるようにする方法はありますか?
.net - NGENで作成された.NETネイティブイメージはロードされません
NGENを使用して、アプリケーションで使用されるいくつかのアセンブリのネイティブイメージを作成しました。ただし、アプリケーションの実行時にこれらの画像が読み込まれないため、理由がわかりません。
これはfuslogvwからの典型的なログです:
そして、そのアセンブリに関するngen.exeからの情報:
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \にあるngen.exeを使用し、アセンブリのターゲットフレームワークは.NET Framework 4です。ネイティブイメージを作成した後、アセンブリを再コンパイルしませんでした。
どんな助けでもいただければ幸いです。