4

私のクラスには、多数のアイテムを含む文字列オブジェクトの静的辞書があります(ファイルから読み取り、それらを初期化します)そのために静的コンストラクターを作成しましたが、数秒かかりますが、一度実行したい私はASP.Netでそれをやっているので、より速くするために、私のウェブサイトにこのオーバーヘッドがないようにしたいのですが、どうすればよいですか? このコンストラクターがオブジェクトごとに実行される場合、代わりに何らかの方法を考えていましたが、ユーザーが実行するWebサイトの各ページでこのメソッドを実行する必要があると思うので、同じだと思いますよね? 変数の大きなセットを一度だけ初期化するための解決策は何ですか? ありがとう

4

2 に答える 2

17

ごとに、タイプに対して 1 回実行されAppDomainます。インスタンスごとに 1 回ではありません。C# 4 仕様のセクション 10.12 から:

クローズ クラス型の静的コンストラクターは、特定のアプリケーション ドメインで最大 1 回実行されます。静的コンストラクターの実行は、アプリケーション ドメイン内で次のイベントの最初の発生によってトリガーされます。

  • クラス型のインスタンスが作成されます。
  • クラス型の静的メンバーのいずれかが参照されています。

クローズドクラスごとであることに注意してください。したがって、ジェネリック型がある場合Foo<T>Foo<string>、(etc) とは別の型でありFoo<object>、別の静的フィールドがあり、その静的コンストラクターが個別に呼び出されます。

于 2011-08-14T19:07:53.687 に答える
4

アプリケーションの存続期間中に 1 回だけ実行されます。

MSDN から -静的コンストラクター:

静的コンストラクターは、静的データを初期化するため、または一度だけ実行する必要がある特定のアクションを実行するために使用されます。最初のインスタンスが作成される前、または静的メンバーが参照される前に、自動的に呼び出されます。

于 2011-08-14T19:09:09.787 に答える