問題タブ [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.

0 投票する
1 に答える
4612 参照

c# - インストール中にNGen .NETアプリケーションを適切に実行する方法

アプリケーションのセットアップ プログラムを生成するために使用しており、インストール中にアプリケーションのNGenInno Setupにスクリプトを書きたいと考えています。、、または. _ _ システム上でNGenできるようにしたい。どうすればこれを達成できますか?x86x64AnyCPU32bit64bit

役立つリンクをいくつか見つけました:
.NET Framework ディレクトリ パスの取得
http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime
私が見つけた場所は非常に複雑な問題です - 最大 4 つの異なるバージョンが存在する可能性がありますNGenアプリケーションの:

  1. CLR 2.0 および 32 ビット システム用
  2. CLR 2.0 および 64 ビット システム用
  3. CLR 4.0 および 32 ビット システム用
  4. CLR 4.0 および 64 ビット システム用

また、アプリケーションが 32 ビット CPU をターゲットにして 64 ビット システムで実行できるという事実によって、さらに複雑になります。


だから私の頭に浮かんだのは、次のような関数でした:

[Code]インストールが成功した後、どこかでそれを呼び出します。

そして、それは次のように機能します:

  1. application.exe (tcpu64, tclr20)
    64 ビット システムでは、64 ビット CPU および CLR 2.0 をターゲットとするネイティブ イメージを生成します。結果 := True
    32 ビット システムでは、何もしません。結果 := False

  2. library1.dll (tcpu64, tclr40)
    64 ビット システムでは、64 ビット CPU および CLR 4.0 をターゲットとするネイティブ イメージを生成します。結果 := True
    32 ビット システムでは何もしません。結果 := False

  3. library2.dll (tcpu32, tclr20)
    64 ビット システムでは、32 ビット CPU および CLR 2.0 をターゲットとするネイティブ イメージを生成します。結果 := True
    32 ビット システムでは、64 ビット システムと同じように動作します。

  4. library3.dll (tcpu32, tclr40)
    64 ビット システムでは、32 ビット CPU および CLR 4.0 をターゲットとするネイティブ イメージを生成します。結果 := True
    32 ビット システムでは、64 ビット システムと同じように動作します。

  5. library4.dll (tcpuAny, tclr20)
    64 ビット システムでは、64 ビット CPU および CLR 2.0 をターゲットとするネイティブ イメージが生成されます。結果 := True
    32 ビット システムでは、32 ビット CPU および CLR 2.0 をターゲットとするネイティブ イメージが生成されます。結果 := True

  6. library5.dll (tcpuAny, tclr40)
    64 ビット システムでは、64 ビット CPU および CLR 4.0 をターゲットとするネイティブ イメージが生成されます。結果 := True
    32 ビット システムでは、32 ビット CPU および CLR 4.0 をターゲットとするネイティブ イメージが生成されます。結果 := True


それを機能させるには、.NET ランタイム ディレクトリへの 4 つの異なるパスを知る必要があります。これは私が見つけたものです:

  1. 32 ビット システム CLR 2.0
    「HKLM\Software\Microsoft\.NETFramework」の「InstallRoot」の値を取得し、value1 に保存し
    ます 「HKLM\Software\Microsoft\.NETFramework\Policy\v2.0」の最初の値の名前を取得し、に保存しますvalue2
    value1 + "v2.0." + value2 + "\ngen.exe" => win
    例: "c:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe"
    これは 32 ビット システムでも 64 ビット システムでも同じように動作すると仮定します。

  2. 32 ビット システム CLR 4.0
    「HKLM\Software\Microsoft\.NETFramework」の「InstallRoot」の値を取得し、value1 に保存し
    ます 「HKLM\Software\Microsoft\.NETFramework\Policy\v4.0」の最初の値の名前を取得し、に保存します値2 値1
    + "v4.0. " + value2 + "\ngen.exe" => win
    例: "c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe"
    これは 32 ビット システムでも 64 ビット システムでも同じように動作すると仮定します。

  3. 64 ビット システム CLR 2.0
    64 ビット .NET Framework の InstallRoot を取得するには?
    例: 「c:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe」

  4. 64 ビット システム CLR 4.0
    64 ビット .NET Framework の InstallRoot を取得するには?
    例: 「c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe」

64 ビット システムの「InstallRoot」値が 32 ビット .NET または 64 ビット .NET の InstallRoot を指すかどうかは実際にはわかりません。最初の 2 つの方法はどのシステムでも信頼できますか? そして、2番目の2つの方法はどのように見えるでしょうか? これをすべて達成する簡単な方法はありますか?

0 投票する
1 に答える
1508 参照

.net - Wix とプロジェクト参照を使用してネイティブ イメージ (NGen) をデプロイする方法

Wix/Votive を使用して、.NET ソリューションのインストーラーをビルドしています。プロジェクト参照を使用して、他のプロジェクト (EXE および DLL) のバイナリを含めます (これは内部的に使用するheat.exeと思います)。

私が今やりたいことは、ngen.exeインストール中にすべてのアセンブリを pre-jit することです。Wix ヘルプによると、これはWiX .NET 拡張ライブラリを介して実行できます。

問題は、<File />タグがによって作成され、内部でタグを生成するようにheat.exeアドバイスする方法、または生成されたタグを参照してタグを外部に添付する方法を理解できないことです。heat.exe<NativeImage /><File /><NativeImage />

現在、私が目にする唯一の方法は、プロジェクト参照を使用しないことですが、明らかにそれらを保持したいと考えています。

助言がありますか?ありがとう!

0 投票する
1 に答える
2015 参照

.net - デバッグ用の JIT 最適化を回避するために、システムにインストールされている .net dll を ngen にするにはどうすればよいですか?

.net 4.0 フレームワークがインストールされており、最適化なしで 3.5 から dll のネイティブ イメージを生成する必要があるため、簡単にデバッグできます。

私はいくつかの異なる方法を試しました:

  1. C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0 に移動します

以下を使用して System.Workflow.Activities.ini を作成します。

ngen.exe アンインストール System.Core.dll

[.NET Framework デバッグ コントロール] GenerateTrackingInfo=1 AllowOptimize=0

ngen.exe アンインストール System.Workflow.Activities.dll ngen.exe インストール System.Workflow.Activities.dll /Debug の実行

C:\Windows\Assembly に移動すると、インストールされているバージョンが AMD64 ではなく MSIL であることがわかります。

  1. C:\Windows\assembly\GAC_MSIL に移動して、そこで NGEN を実行してみました。

繰り返しますが、行きません。

何をすべきかについてのアイデアはありますか?

0 投票する
5 に答える
11256 参照

.net - JIT と NGen - 違いは何ですか?

そのため、CLR ランタイムが .NET アセンブリを読み込むと、それがマシン ネイティブ コードにコンパイルされます。このプロセスは JITing と呼ばれます。NGen は、.NET アセンブリをネイティブ コードにコンパイルするプロセスでもあります。2つの違いは何ですか?

0 投票する
1 に答える
1020 参照

wix - 昇格された権限で WiX から ngen を実行するには?

この記事ngenを使用してインストーラーに含めようとしています。インストール中に同期的に (優先度 = 0 で)実行したいのですが、実行するには管理者権限が必要です。そのため、ログに次のメッセージが表示されます。ngen

ngen の起動時に、この時点で (標準の UAC プロンプトを使用して) ユーザーに管理者権限を求める簡単な方法はありますか? ユーザーが「いいえ」を押すと、ngen なしで続行します。はいの場合 - ngen を実行し、アプリケーションをプリコンパイルします。何かご意見は?

ありがとう。

0 投票する
5 に答える
15436 参照

c# - Ngenを実行した後、生成されたファイルの場所はどこにありますか?

私はC#実行可能ファイルでNgenを実行しました。成功しましたが、生成されたファイルがPCのどこにあるのかわかりません。MSDNによると、ネイティブイメージキャッシュにあるはずですが、それでもどこにあるのかわかりません。

編集:その上でobjdumpを実行したいので、物理ファイルが必要です

EDIT2:ngenを実行する私のプットプットは:

0 投票する
2 に答える
2129 参照

.net - .NETアプリケーションのJIT時間の測定

NGenを使用して、.NETアプリケーションのネイティブのプリコンパイル済みイメージを作成できることを認識しています。

しかし、アプリケーションがJITで費やした時間をどのように測定しますか?どのプロファイリングツールがこれを測定しますか?そうする無料のツールはありますか?これを行う前に、どれだけの時間を節約できるか知りたいのですが。

0 投票する
1 に答える
13712 参照

c# - TargetedPatchingOptOut:「NGen イメージの境界を越えてインライン化するために重要なパフォーマンス」?

リフレクターを使用していくつかのフレームワーク クラスを調べていて、いくつかのメソッドとプロパティに次の属性があることに気付きました

上記のコメントをどこかで見たことがあり、フォローアップしたことはないと確信しています。

これが C# やその他のコンテキストで何を意味するのか教えてください。

0 投票する
6 に答える
26542 参照

.net - mscorsvw.exe を強制終了する方法

mscorsvw.exe (アセンブリをプリコンパイルする .NET 最適化) が CPU のかなりの割合 (50 ~ 100%) を占めています。

この記事 (および他の多くの記事) は、次のように述べています。

ngen.exe executequeueeditems

コマンドラインからそれを殺す必要があります。私にとって、そのコマンドはただハングします。このプロセスを強制終了するより良い方法はありますか?

再起動は試していません。ここ数日で、CPU 使用率が何度も急上昇しているのを見てきましたが、これが私の問題ではないかと思います。今後の倒し方が知りたいです。

0 投票する
1 に答える
1348 参照

.net - ngen とプロファイリング

NGen を使用して、アプリケーションのネイティブ イメージが .NET よりも適切に動作するかどうかを確認しようとしています。とはいえ、どうすればいいのかわからず困っています。

私のアプリケーションはMyApp.exeと呼ばれ、いくつかの依存 DLL があります。

VS 2010 コマンド プロンプトを開いて実行しました。

コマンド出力は、問題が発生したことを示唆していませんでした。

次に、C:\Windows\assembly に移動して EXE を実行しようとしましたが、そこでは見つかりませんでした (私は Windows 7 を使用しています)。少し調べてみると、コマンド プロンプトを使用して C:\Windows\assembly\NativeImages_v4.0.30319_32 を参照するように指示されました。私は最終的にそこに MyApp.ni.exe を見つけることができましたが、もちろん、含まれているフォルダーをエクスプローラーで開くことはできませんでした。

プログラムを実行しようとしたところ、次のように言われました。

「C:\Windows\assembly\NativeImages_v4.0.30319_32...\MyApp.ni.exe は有効な Win32 アプリケーションではありません。」

コマンド出力は、アクセスが拒否されたと述べています。

2 つの質問がありました。

  1. ネイティブ バージョンを実行できるように、このプログラムを実行するにはどうすればよいですか。
  2. それをプロファイリングするにはどうすればよいですか?エクスプローラーで表示できないため、VS2010 プロファイラー内からそのフォルダーを見つけることができないようです。

ありがとう。