2012-06-22 3 views
6

.Designer.cs生成クラス(MyResourceType.ResourceManager)の "キャッシュされたResourceManagerインスタンス"を使用する場合は、new ResourceManger(myResourceType.FullName, myResourceType.Assembly)ですべての要求に対して新しい.NET ResourceManagerを作成するとパフォーマンス(またはその他)の影響がありますか?静的にキャッシュされたResourceManagerを使用するか、Webリクエストごとに新しいインスタンスを使用する必要がありますか?それは問題ですか?

私は、.resxファイルを使用してASP.NET MVC 3アプリケーションのコンテキストで作業しています。

編集:私は、新しいオブジェクトにメモリを割り当てるコストを超えています。

編集:これは、新しいを作成することを私に示唆している、リソースセットの最初の開口部が高価であることを示唆しているようだ

This method will shrink the working set in a running application. Any future resource lookups on this ResourceManager will be as extensive as the first lookup, since it will need to search and load resources again.

ResourceManager.ReleaseAllResourcesについては、MSDNのドキュメントを見ると、それはと述べています各リクエストのマネージャは高価になる可能性があります。しかし、ドキュメントは、リソースマネージャの有効期間/有効範囲に関するベストプラクティスを示唆していません。

答えて

4

私はキャッシュされたマネージャー(リフレクションを使用して各リソースタイプのキャッシュされた静的マネージャーを見つける)と、各キーアクセスのための新しいマネージャーを使用することの間に、いくつかの基本的なプロファイリング(MiniProfilerを使用)を行いました。その結果、新しいマネージャーは約45倍の時間がかかりました。これは、キャッシュされたマネージャーアプローチを使用することで実際にパフォーマンス上の利点があることを示唆しています。しかし、両方のアプローチは非常に速く、その差はおそらく実際にはあまり重要ではないでしょう。

0

作成時にオブジェクトの割り当てがあります。

これは、オブジェクトを何度も繰り返し作成することにパフォーマンスとメモリの関係があることを意味します。一度作成した(プロセスごと)とその不要な割り当てが存在していない「キャッシュされた」リソースマネージャインスタンスの量対(パフォーマンスカウンタを使用して)しているどのように多くのガーベジコレクションのサイクル

あなたはそれを試してみて、確認することができます

+0

オブジェクトの割り当ては唯一の意味ですか?私はリソースファイルのキャッシュのようなものにもっと心配しています... – ChaseMedallion

+0

私はそれについてはわかりませんが、あなたはパフォーマンスカウンターとプロファイラーで確認する必要があります – eyossi

関連する問題