我目前正在質疑代碼片段,關於它的有效性和資源耗用。以下是將被編譯爲DLL的全局日誌記錄實用程序方法。該方法可以同時訪問。禮節和/或寫入文件的最佳方式
private static void Log(string logType,
string severity,
object sender,
string format,
params object[] args)
{
if (Logger._logLock.WaitOne(250))
{
try
{
using (StreamWriter sw = new StreamWriter(Logger._activityLogPath, true))
{
if (logType != "RAW")
{
sw.Write("{0} {1} {2} ",
DateTime.Now,
logType,
severity);
}
sw.WriteLine(format, args);
}
}
finally
{
Logger._logLock.ReleaseMutex();
}
}
}
什麼是困擾我的是「使用」塊將被從同一個文件創建一個流,每一次的東西記錄(每秒多調用)。我知道文件緩存,所以我不完全確定重新安裝流是一個太大的問題(然而不必要的流緩衝區初始化?)。我在玩Logger類時添加StreamWriter作爲變量的想法,但我也想確保在單元不正常關機的情況下寫入程序已正確關閉或刷新。已知終端用戶關閉該單元。我試圖找到安全和速度之間的平衡,只是希望有一點洞察力。謝謝。
感謝您的回覆和確認。我將開始尋找你提到的一些預製框架。我只是想確保我沒有錯過爲什麼代碼是按照原來的方式編寫的關鍵。原來的編碼人員並不是一個懶散的人,而且這段代碼看起來非常沒有他的特徵,所以我認爲他一定這樣做是有原因的。 –
要清楚的是,如果按照您的建議實施,那麼已記錄到集合中的任何內容,在硬關閉時尚未刷新到該文件,將會丟失。請在確定適當的沖洗間隔時記住這一點。不要說這是壞的/好的或無關緊要的(取決於系統的記錄要求)。 – Kevin
還要記住,異常(如果記錄它們)應該被記錄並立即刷新。 – Kevin