問題タブ [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# - アセンブリの依存関係に関する NGen エラー
どうやら新しい問題ではないようですが、まだ答えが見つからないようです。
Google の Analytics API for .NET を使用していますが、アセンブリをうまく連携させるのに苦労しています。Visual Studio 2012 でビルドすると、ビルド エラーは発生しません。ただし、NGen を使用してプロジェクトをプリコンパイルし始めると、多くの不適切なアセンブリ参照が表示されます。
MVC 4、Visual Studio 2012、および最新の Google.Apis パッケージ (現時点では 1.5.0.1-beta) を使用しています。
問題のプロジェクトにインストールした .dll の / バージョンは次のとおりです。
NGen の出力で見つけたエラーは次のとおりです。
Failed to load dependency System.Net.Http.Primitives of assembly Google.Apis, Version=1.4.0.28227, Culture=neutral, PublicKeyToken=null because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Failed to load dependency System.Web.Mvc of assembly DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Failed to load dependency log4net of assembly DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
そして、これが私がそのプロジェクトのweb.configに持っているものです:
そのほとんどは、NuGet を使用して Google.Apis パッケージをインストールしたときに構築されたと思いますが、アセンブリ バインディング リダイレクトが NGen からのこれらのエラーを防げない理由がわかりません。
誰かが私を正しい方向に向けるのを助けることができれば、本当に感謝しています! ありがとうございました!
c# - 「Mscorlib.dll にネイティブ イメージがない」ための Ngen エラー (x64 のみ、.NET 4.0 のみ)
64 ビットの Windows 7 でNgenを使用して .NET 4.0 アプリケーションのネイティブ イメージを生成しようとしています。プラットフォームが x64 (または任意の CPU ) に設定されている場合、Ngen が失敗し、「Mscorlib.dll が原因で NGen を続行できない」と不平を言います。ネイティブ イメージ が あり ませ ん. '
x86 としてコンパイルし、適切な Ngen を使用すると、正常に動作します。また、.NET バージョンを 2.0 に変更すると動作します。(x86 Ngen で x64 アプリケーションを Ngen しようとすると、64 ビット バージョンを使用するように指示されます。)
詳細情報:
これは、CMD で見たもの (の一部) です。楕円 (= ...) はオリジナルに存在します。
1> アセンブリmscorlibのコンパイル、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089 (CLR v4.0.30319) ...
1> mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
.
2> アセンブリ アクセシビリティのコンパイル、バージョン = 4.0.0.0、カルチャ = ニュートラル、パブリック キートークン = b03f5f7f11d50a3a (CLR v4.0.30319) ...
.
2>Ngen は、イメージ アクセシビリティ、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a のネイティブ コードを生成できませんでした。これは、次のエラーが原因です: Mscorlib.dll にネイティブ イメージがないため、NGen を続行できません(HRESULT からの例外: 0x80131F06) )
内部C:\Windows\assembly
を検索すると、3 つのmscorlib.dllが見つかりました。に1GAC_32
つ、GAC_64
(2.0.0.0 で始まるサブフォルダーに両方とも) に 1 つ、サブフォルダーに 1 つtemp
。
内部C:\Windows\Microsoft.NET
を検索すると、そのうちの 6 つが見つかりました。「v4.0...」で始まるフォルダーassembly
(と) の下に 2 つ、 GAC
' s に 4 つ: Frameworkに 2 つ、Framework64に 2 つ(それぞれ - 「v2.0...」に 1 つ、「v4.0...」に 1 つ)。32
64
Framework
これは、.NET 2.0 mscorlib のみが実際にネイティブ イメージとして (必要な場合に) 実行されるということですか? Ngen が .NET 4.0 のネイティブ イメージの保存に成功しないのはなぜですか?
結論: x64 をターゲットとする .NET 4.0 アプリケーションのネイティブ イメージを作成するにはどうすればよいですか?
.net - IL アセンブリを一致させずに ngen で生成された古い .net ネイティブ イメージをアンインストールするにはどうすればよいですか?
開発中のアプリケーションで「ngen install ...」を実行しています。ただし、これらのアセンブリが上書きされる前に、一部のバージョン/シナリオ (デバッグなど) で「ngen uninstall ...」を実行していません。現在、「C:\Windows\assembly\NativeImages_v4.0.30319_64\AssemblyName\hashkey」という形式のフォルダーに多くの *.ni.exe および *.ni.dll が表示されます。(DLLも自社開発のものです。)
私は.Net 4を使用しています。
これらをアンインストールする方法はありますか?「ngen update」を試してみましたが、これらの孤立したネイティブ イメージには触れていないようです。もちろん、これらを手動で削除することもできますが、アセンブリが依存しているシステム dll の参照カウントを混乱させたり、.net システムに悪い結果をもたらしたりします。
これらの古いアセンブリは、スペースを占有するだけでなく、アセンブリ バインダーが現在の IL を各ネイティブ アセンブリに一致させようとするため、起動の遅延に影響を与えます。
また、コマンド ラインを使用するのではなく、ネイティブ イメージ キャッシュの内容を確認するより良い方法はありますか?
ありがとう
java - Dalvik VM と ART ランタイムの違いは何ですか?
Dalvik VM は、最初の Android バージョンからデフォルトの VM です。
Google は KitKat 4.4 で新しい ART ランタイムをリリースしました。
AndroidPoliceは、アプリのパフォーマンスとバッテリー寿命が向上すると述べています。残念ながら、ART に関する技術情報はほとんどありません。このページしかありません。
私が理解したことから、Dalvik VM は実行時に dex バイトコードを機械命令に変換します。ART は dex コードをネイティブ命令にプリコンパイルするため、実行時の変換ステップが不要になります。
これに関して:
- 私の理解は正確ですか?
- ART が dex バイトコードをネイティブにコンパイルすると、ガベージ コレクターはどうなりますか?
- ART の背後にある考え方は、Microsoft の NGEN に似ていますか?
- ART はアプリのデバッグにどのように影響しますか?
.net - NGEN を使用した場合の作業スペースの節約を計算する
私は現在、Citrix ファームで実行する場合のメモリ節約に関して、NGEN が .NET クライアントにメリットがあるかどうかを計算しようとしています。
私の主な参考文献は次の記事です。
この記事では、VMMap を使用して、共有可能な WS が増加し、ゴールデンかどうかを確認するだけでよいことを示唆しています。
実際、共有可能な WS では約 56MB の増加が見られます (前後の写真を参照)。しかし、合計 WS も同様に跳ね上がっていることにも注意してください。おそらく、NGEN 画像のサイズが大きくなったためでしょうか?
したがって、これを考慮する必要があると思いますが、実際には数 MB 悪化しています。
しかし、JITが発生していないため、スペースを節約していることも理解しています。私が信じているJITは、プライベートデータの下に表示されます。
私はこれを次のように計算します: - [Δ Image ShareableWS] + ([Δ Image PrivateWS] - [ΔPrivate Data Total WS])
以下の図を使用します。
- 56.3 + (-58.3 - -6.8) = 4.8MB の節約 (後続のプロセスごと)
だから私は質問だと思います - 私はこれを正しくやっていますか?ここで私が見逃している、または考慮に入れていないものはありますか?
NGEN前
NGEN後
ngen - ngen.exe はいつ、どのように機能しますか?
Pre-JIT コンパイル (ngen.exe) の利点を知りたいです。Native Image Generator (NGen) プロセスの役割と、それが必要な理由は何ですか?
例を挙げてください。
nuget - Microsoft.Bcl.Async のような nuget からアセンブリを GAC に追加して ngen にすることをお勧めしますか?
起動時のパフォーマンスは、ほとんどのアセンブリを ngen 化して GAC に入れることで改善される可能性がありますが、何らかの理由でこれを行うための推奨事項に出くわしていませんか?