2011-11-28 116 views
0

我正在編寫一個簡單的實用程序來獲取應用程序日誌並將它們顯示給用戶。它需要從多個文件中取出日誌條目並將它們合併到單個內部存儲中。合併基於日誌輸入時間,因此多個條目可能具有相同的時間。請注意,日誌的大小相當小,因此最大大小可能爲10個文件,每個文件包含2,000個日誌條目。快速插入和過濾的最佳數據結構

我也想把這個呈現給用戶,但是允許他們根據不同的日誌級別(調試,警告,錯誤等等)進行過濾,並根據它來自的文件進行過濾。這聽起來像是一種非常常見的問題,所以其他人必須具備最佳方法的經驗。我曾想到以下內容......

1,使用DataSet存儲日誌條目,然後使用DataView應用過濾,排序。

2,使用一對列表<>實例,一個主,然後是過濾到所需條目的副本,並將自定義IComparer函數應用於過濾列表以獲得正確的排序。

想法?

+0

這是什麼類型的應用程序,即您可以在初始加載+合併和每個過濾請求之間保持數據集/列表/附件多長時間? –

+0

這個想法是觀察一個實時應用程序並監視它們生成時的日誌。到數據集/列表將更新每秒幾條記錄,用戶可以交互過濾。初始加載允許在應用程序啓動時加載最近的消息。 –

+0

您是否已經解決了在其他應用程序正在寫入文本文件時打開/監視文本文件的問題,以及是否只檢測並只讀取這些文本文件中的最新行?只是檢查,同時考慮答案 –

回答

2

我假設數據足夠小以適應內存,並且您寧願沒有數據庫和外部文件的開銷。

兩者中的任何一個都應該很好地工作。我更喜歡List<T>,所以會更喜歡,但可以理解使用DataTable等的吸引力。

另一種選擇是在您選擇的任何內部數據存儲上使用LINQ。這可能會簡化查詢。

我懷疑List<T>或任何你選擇的收集將使用比DataTable更少的內存。但是,除非你的日誌條目是巨大的,我不認爲內存使用會成爲一個問題。

+0

列表和Linq 2對象將是最容易的IMO,但如果你沒有linq經驗,就像Jim說Datatable會好的。 – BlackICE

1

我個人的做法是將日誌導入到數據庫中,然後使用標準數據庫查詢和數據綁定來過濾數據並將其呈現給用戶。