データベースからフェッチされたものに基づいて計算するために、かなりの量のリクエストで使用する数千の整数のルックアップ テーブル (LUT) があります。
単純に LUT を保持するための標準的なシングルトンを作成した場合、それはリクエスト間で自動的に永続化されますか?それとも特にアプリケーション状態にプッシュする必要がありますか?
それらが自動的に永続化される場合、それらをアプリケーション状態で保存する違いは何ですか?
正しいシングルトンの実装はどのようになりますか? 遅延初期化する必要はありませんが、スレッド セーフ (サーバー インスタンスあたり数千の理論上のユーザー) であり、優れたパフォーマンスを備えている必要があります。
編集: Jon Skeet の 4 番目のバージョンは有望に見えます http://csharpindepth.com/Articles/General/Singleton.aspx
public sealed class Singleton
{
static readonly Singleton instance=new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
// randomguy's specific stuff. Does this look good to you?
private int[] lut = new int[5000];
public int Compute(Product p) {
return lut[p.Goo];
}
}