2012-06-25 41 views
2

我想使用streamreader將多個文件的文本讀入字符串,但截至目前,我的代碼讓我每次讀取不同的文件時都會創建一個新的streamreader。這種方式很有效,雖然重複了數百次,但效率很低。我相信這是一個非常簡單的解決方案,但我對編程還是一個新手,所以有些知識將會非常值得讚賞。是否有必要創建多個流讀取器實例來讀取多個文件?

我想低效的代碼示例來避免:

someloop 
{ 

    using (StreamReader sR = new StreamReader(changingfilename)) 
    { 
     textString = sR.ReadToEnd(); 

    } 

} 

回答

2

從磁盤讀取相對非常慢。 StreamReader的實例化可以忽略不計。緩慢的部分是ReadToEnd(),而不是新的StreamReader()。如果代碼太慢,請儘量避免從磁盤讀取數據。

的Visual Studio船與探查它會告訴你到底有些版本哪些方法花費的CPU /時鐘時間程序

+0

因此,如果我正確地理解了你,就不可能避免完全讀取文件伴隨的滯後時間? – Ari

+0

是的。做IO(磁盤,網絡,數據庫)比CPU和內存操作慢得多。 –

+0

除非您多次閱讀相同的文件。然後您可以將內容存儲在內存中。如果您多次閱讀同一個文件,您的問題還不清楚。 –

0

那麼你必須爲每個文件創建一個stramreader你可以做什麼 創建一個數組,這樣

閱讀
List<string> lstFileNames=new List<string>(); 
StringBuilder stringBuffer=new StringBuilder(); 
lstFileNames.Add("File1"); 
lstFileNames.Add("File2"); 
for(int i=0;i<lstFiles.Count;i++) 
{ 
    using (StreamReader sR = new StreamReader(lstFiles[i])) 
    { 
     stringBuffer.Append(sR.ReadToEnd()); 
    } 
} 

用於追加字符串的用戶字符串生成器。

+0

,但將在更快,考慮到它現在需要創建額外的變量? – Ari

+0

它不會。不是因爲額外的變量,而是因爲執行相同數量的讀數。 –

0

一個更好的方法是簡單地讓.NET爲你處理這個靜態方法File.ReadAllText(yourFileNameAndPath)