我有一個具有每秒寫入信息數次記錄:C#記錄不寫都行
long iii = 0;
while (true)
Logger.WriteLog("=====> " + iii++);
記錄儀基本上只是在文件中寫入
public static bool WriteLog(string newLines)
{
string txtLines = string.Empty;
strError = string.Empty;
...
lock (thisLock)
{
string strDateTime = "[" + DateTime.Now.ToString() + "." + DateTime.Now.ToString("fff") + strDelta + "] ";
newLines = strDateTime + newLines;
newLines = newLines.Replace(Environment.NewLine, Environment.NewLine + strDateTime);
lastLogTime = DateTime.Now;
...
File.AppendAllText(_fileName, newLines);
return true;
}
}
}
所以我所期望的會是像1,2,3,4,5等連續數字的增長列表。
,而不是我所得到的是:
[27/03/2017 11:09:25.540 - START] =====> 0
[27/03/2017 11:09 :25.541 - 00:00:00.001] =====> 1
[27/03/2017 11:09:25.542 - 00:00:00.001] =====> 2
[ 27/03/2017 11:09:25.556 - 00:00:00.014] =====> 4
[27/03/2017 11:09:25.557 - 00:00:00.001] =====> 5
[27/03/2017 11:09:25.582 - 00:00:00.025] == ===> 7
[27/03/2017 11:09:25.592 - 00:00:00.010] =====> 9
所以很顯然,我做錯了什麼。 從here我得到的附加文本應該自己做:寫,刷新,關閉。
這就是說我還有其他奇怪的事情發生。 如果我在調試模式下啓動的例子,並儘量減少它,我得到展示調試器下面的錯誤如下圖:
託管調試助手「ContextSwitchDeadlock」已檢測到「C的一個問題:\ TEMP \ WpfApplication1 \ WpfApplication1 \ BIN \調試\ WpfApplication1.vshost.exe」。
附加信息:CLR無法從COM上下文0x4236c0轉換到COM上下文0x423830 60秒。擁有目的地上下文/公寓的線程很可能要麼進行非抽水等待,要麼處理非常長的運行操作而不抽取Windows消息。這種情況通常會對性能產生負面影響,甚至可能導致應用程序無法響應或內存使用量不斷累積。爲了避免這個問題,所有的單線程單元(STA)線程都應該使用抽取等待原語(比如CoWaitForMultipleHandles),並在長時間運行的操作中定期抽取消息。
感謝幫助。
爲什麼不使用log4net等日誌框架?你不必自己做這件事。這個框架將爲你處理所有事情,併發訪問。 –
這可能是一個解決方案,但可惜我把我的例程數十億的電話,所以我想使用我的例程.... – Luca
如果您使用多個線程,你是否確保只有一個線程可以更新序列號? –