2012-10-10 36 views
0

我在搜索c#中的虛擬列表視圖時遇到問題。C#listview搜索虛擬模式

我現在正在做的是讀一個大的日誌文件。這裏是我到目前爲止所實現的內容

我一次讀取一行文件,並記下行的開始位置。將這些位置添加到列表中,並在調用RetrieveVirtualItem時 - 使用項目和列表的索引在文件中查找位置,然後從文件中讀取行。

因此讀取文件時沒有滯後。

我想現在搜索項目。這是我迄今爲止想到的,但是我沒能成功地實現它。

我實際上並不是在搜索listview,但在我的文件讀取期間,我標記了特定字符串的命中位置,稱爲「INFO」。如果它命中,我將該位置添加到列表中。

當RetrieveVirtualItem被調用時,我只是用所有命中符讀取行。

似乎通過調試 - if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0)沒有擊中任何匹配。我不確定爲什麼,有人幫忙?

using (var sr = new myStreamReader("test.log")) 
{ 
    while ((line = sr.ReadLine()) != null) 
    { 
     if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0) 
     { 
      position = sr.BytesRead; 
      Search.Add(position); 
      searchcount++; 
     } 
    } 
    newMessageView.VirtualListSize = searchcount; 
} 

回答

2

我不知道你的「myScreamReader」類的工作,但如果類似的StreamReader這個代碼可以爲你工作:

using (var sr = new StreamReader("test.log")) 
{ 
    while (!sr.EndOfStream) 
    { 
     string line = sr.ReadLine(); 
     if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0) 
     { 
      // line contains "info" 
     } 
    } 
} 

您應該設置一個斷點調試代碼在line.IndexOf ...檢查行的值是否正在改變,看起來是否正確。

+0

謝謝,我試過了。大約需要10s-15s來搜索文件,我想這是可以接受的。我想不出另一種方式來加速它比現在更多 – Teddy