TickZoom是一款非常高性能的應用程序,它使用自己的並行庫和多個O/S線程來平滑利用多核計算機。寫入具有多線程性能問題的log4net FileAppender
該應用程序遇到了瓶頸,用戶需要從不同的操作系統線程向LogAppender寫入信息。
FileAppender使用MinimalLock功能,以便每個線程都可以鎖定並寫入文件,然後釋放它以供下一個線程寫入。
如果MinimalLock被禁用,log4net會報告有關該文件已被另一個進程(線程)鎖定的錯誤。
log4net執行此操作的更好方法是讓單個線程負責寫入FileAppender,而其他任何線程只將其消息添加到隊列中。
以這種方式,可以禁用MinimalLock以極大地提高日誌記錄的性能。
此外,該應用程序執行大量CPU密集型工作,因此它還將提高性能,以便使用單獨的線程寫入文件,以便CPU永遠不會等待I/O完成。
所以問題是,log4net是否已經提供了這個功能?如果是這樣,你怎麼做啓用線程寫入文件?也許還有另外一個更高級的appender?
如果不是,那麼因爲log4net已經包裝在平臺中,所以可以在TickZoom代碼中爲此實現單獨的線程和隊列。
真誠, 韋恩
編輯:
感謝看來答案指向開發我們自己的解決方案也許是一個擴展以某種方式log4net的。而且他們清楚地表明log4net不會做這種類型的事情。另外,我們只是意識到我們可能會「濫用」主要用於通知重要事件或調試信息的人類可讀消息的日誌記錄系統。軟件輸出的這一特定部分僅用於驗證系統準確性的自動化工具。
當然,我們也使用log4net以「正常」方式進行調試,警告等。
但是這些更像是「事務日誌」而不是調試或用戶通知日誌。更具體地說,這些日誌不需要直接可讀。如果需要,某種類型的「查看器」可以以ASCII格式顯示內容。
所以我們計劃將這些交易類型的日誌寫入高速二進制存儲。
感謝看起來下面的兩個答案都是對開發我們自己的解決方案的巨大推動。
感謝您澄清這是不可能的在log4net和微調內部的解決方案。 – Wayne 2010-05-07 06:30:14