リクエストとスレッドの両方で、アプリケーション全体で使用されるロガークラスがあります。ロガーは、Log.Insert(文字列テキスト)ごとのデータベース挿入で構成されます。ロガーは静的クラスであり、Insertを呼び出すたびに新しいデータベースコンテキストが作成されます。Insertの呼び出しが多く、同時に多くのデータベースコンテキストが最適化に適していない可能性があります。(アプリケーション全体でSQL操作が多すぎるために、データベースがタイムアウトすることがあります。そのため、最適化が実際に必要です)。
Log.Insertsにのみ使用されるLoggerクラスの静的メンバーに単一のデータベースコンテキストを作成して保存することで、これを最適化できますか?それともこれは失敗しますか?
ロガークラスの簡略化されたバージョン。
[Table]
public class Log
{
[Column]
public string Text { get; set; }
private static DataContext DatabaseContextInsert { get; set; }
public static void Insert(string text)
{
if (DatabaseContextInsert == null)
{
DatabaseContextInsert = DataContextHelper.GetDataContext();
}
var log = new Log { Text = text };
lock (DatabaseContextInsert)
{
DatabaseContextInsert.GetTable<Log>().InsertOnSubmit(log);
DatabaseContextInsert.SubmitChanges();
}
}
}