2010-11-25 15 views
2

ASP.Netでは、アプリケーションでサポートしたい各カルチャのリソースファイルを作成できます。ASP.Netローカリゼーションのパフォーマンス

(リソースデザイナーで)HelloWorld = "Hello World"

このリソースファイルをコードで参照できます。

Label1.Text = Resources.General.HelloWorld 

注:一般は私の一般的なリソースファイルの名前です。

これは、Visual Studioがリソースへの安全なアクセス(+ intellisenseは便利です)を持つようにリソースをコンパイルしたことを意味します。

ただし、効率はどれくらいですか?

  • は、.NET何とか動的に実行前のコンパイルにリンクされている定数を含むクラスを作成してい - ので、彼らは一種のアセンブリに「に組み込まれて」いますか?

  • ローカライズされた値を取得するためにリソースが要求されたとき、またはファイルをスキャンします(どこか)。

これが起こった場合、1番目の方が効率的なように見えます。ローカリゼーションはアプリケーションにパフォーマンスオーバーヘッドを追加しますか?ローカリゼーションによって価値のあるユーザビリティがサイトに追加された場合、「合理的な」パフォーマンスのヒットはOKです。

ありがとうございました。

答えて

2

Resource.Designer.csファイルを見てください。

基本的に、VS.NETは静的プロパティを持つクラスを作成し、ResourceManagerクラスを使用してローカライズされたリソースに定数キーを使ってアクセスします。すべての文字列およびその他のリソースは、別々の(カルチャー固有の)サテライトアセンブリにリソースとして格納されます。

Thread.Current.CurrentUICultureに応じて、CLRは対応するサテライトリソースアセンブリを読み込みます。

パフォーマンスに関して、ResourceManagerはリソースをHashTableにキャッシュするので、比較的高速である必要があります。

+0

答えをありがとう。したがって、明確にするために、要求は入ってくる。 es-ESの場合、スレッドはこのカルチャに設定され、ASP.Netは関連するサテライトアセンブリをロードし、メインのweb.dllにリンクします。これらのリソースに対する要求は、サテライトアセンブリから得られますか? – Remotec

+0

ResourceManagerは、現在のUIカルチャリソースアセンブリに対応する名前付きリソースを最初に探します。見つかった場合、リソースを探してそれを返します。名前付きリソースが見つからない場合、フォールバック戦略を使用して、指定された名前の中立リソースを探します。何も見つからなければ、nullを返します。 –

関連する問題