モジュール/メソッドの実行時間を見つけるためにトレースクラスを書いています。私はこのようなクラスを持っています
public class Trace
{
static Dictionary<string, Stopwatch> watches = null;
static Trace()
{
Dictionary<string, Stopwatch> watches = new Dictionary<string, Stopwatch>();
}
public static void Start(string key, string losgMessage)
{
try
{
if (!watches.Keys.Contains(key))
{
Stopwatch watch = new Stopwatch();
watch.Start();
watches.Add(key, watch);
}
}
catch
{
}
}
public static void Stop(string key, Object logMessage, string sessionId)
{
try
{
if (!watches.Keys.Contains(key))
{
Stopwatch watch = watches[key];
watch.Stop();
//log goes here
}
}
catch
{
}
}
}
wcfはマルチスレッド環境であり、「watches」静的変数スコープはアプリケーションレベルであるため、誰か(異なるクライアントからの新しいrqst)が同じキーで同じメソッドを実行しようとすると、それを考慮せずにトレースします。したがって、この場合の最良のオプションは何でしょうか。どんな提案も役に立ちます。
編集:現在、sessionIdにキーを追加しています。セッションIDなしでこの問題を解決できません