1

.NET ベースのクライアント側アプリを高速化したいだけで、コードを NGEN 化することを検討しています。

Jeffery Richterは、 ngening コードに関する次の警告を書きました。

•ロード時のパフォーマンスの低下 (リベース)。Windows は、NGend ファイルをロードするときに、ファイルが優先ベース アドレスにロードされているかどうかを確認します。ファイルが優先ベース アドレスにロードできない場合、Windows はファイルを再配置し、すべてのメモリ アドレス参照を修正します。Windows はファイル全体をメモリにロードし、ファイル内のさまざまなバイトを変更する必要があるため、これには非常に時間がかかります。リベースの詳細については、私の著書『Programming Applications for Microsoft Windows, 4th Edition』(Microsoft Press) を参照してください。

このトピックについてあまり知らないので、プロジェクト内の設定を変更する前に何を知っておくべきですか? また、どの設定を変更する必要がありますか?

4

3 に答える 3

2

この Microsoft ブログによると、「Vista 以降の OS でベース アドレスを設定することでメリットが得られる、わずかなケースがあるかもしれませんが、これらはほとんど無視できます。」そのため、ngen を使用すると起動時間短縮されますが、Vista より前の OS をサポートしない限り、ベース アドレスを設定する必要はなくなりました。これは、新しい Address Space Layout Randomization セキュリティ機能の副作用です。

于 2012-04-11T02:32:48.280 に答える
2

DLL の再配置は読み込み時にのみ発生します。一度読み込まれると、再配置プロセスによるパフォーマンスの低下はありません。もちろん、DLL の数とサイズ (再配置の数) によっては、ロード時間に大きな影響を与える可能性があります。これは、アプリケーションが頻繁に開始および停止される場合の問題です。

ロード時間を改善するために DLL をリベースするには、継続的な監視とチューニングが必要です。DLL のロード場所の間に十分な余裕がないと、DLL が大きくなったり、新しい DLL がプロジェクトに追加されたりすると衝突が発生します。

これは、MSDN の記事で、アプリケーションの起動時間を改善する方法について説明しています。 http://msdn.microsoft.com/en-us/magazine/cc163655.aspx

于 2010-08-29T07:16:45.803 に答える
1

NGENを使用すると、ベースアドレスを指定できます(VS設定でも公開されます)。NGENを使用する場合は、基本的にDLL間に重複がないことを確認する必要があります。オーバーラップがある場合、CLRは、ロード時にそれらをリベースするように強制されます。

于 2010-08-28T17:44:36.080 に答える