ngenがコードを再baseしないようにするにはどうすればよいですか(パフォーマンスに悪影響を与える)?

StackOverflow https://stackoverflow.com/questions/3591699

質問

.net-baseクライアントサイドアプリをスピードアップしたいだけで、ngen-ing ingingを検討しています。

ジェフリー・リヒター これを書いた NGENINGコードについての警告:

•荷重時間パフォーマンス(リベッシング)。 Windowsがngendファイルをロードすると、優先ベースアドレスでファイルがロードされるかどうかを確認します。ファイルが優先ベースアドレスにロードできない場合、Windowsはファイルを再配置し、すべてのメモリアドレス参照を固定します。 Windowsはファイル全体をメモリにロードし、ファイル内のさまざまなバイトを変更する必要があるため、これは非常に時間がかかります。 Rebasingの詳細については、私の本:Microsoft Windowsのプログラミングアプリケーション、第4版(Microsoft Press)を参照してください。

このトピックについてはあまり知らないので、プロジェクト内で設定を変更し始める前に何を知る必要がありますか?また、どのような設定を変更する必要がありますか?

役に立ちましたか?

解決

によると このMicrosoftブログ, 「Vista+ OSESにベースアドレスを設定することに利点があるが、これらはほとんど無視できる限りの場合があるかもしれない。」したがって、ngenを使用している間 します スタートアップの時間を改善すると、ビスタ以前のOSEをサポートしない限り、ベースアドレスを設定する必要はなくなります。これは、新しいアドレススペースレイアウトランダム化セキュリティ機能の副作用です。

他のヒント

DLLの再配置は、ロード時にのみ発生しますが、ロードされると、再配置プロセスのためにパフォーマンスヒットはありません。もちろん、DLLの数とサイズ(再配置の数)に応じて、負荷時間が大きく影響する可能性があります。これは、アプリケーションが頻繁に開始され停止することです。

DLLを再測定して負荷時間を改善するには、継続的な監視とチューニングが必要です。DLLロード場所の間に十分なヘッドルームを離れていない場合、DLLが成長するか、新しいDLLがプロジェクトに追加されるにつれて衝突が発生します。

これは、アプリケーションの起動時間を改善するためのMSDNの記事ディスカッションの方法です。http://msdn.microsoft.com/en-us/magazine/cc163655.aspx

NGENを使用すると、ベースアドレスを指定できます(VS設定でも公開されています)。 ngenに行く場合は、基本的にDLL間の重複がないことを確認する必要があります。オーバーラップがある場合、CLRはロードされたときにそれらを再除去することを余儀なくされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top