2015-11-18 48 views
0

我有一個函數內以下循環:字符串數組處置在一個循環中

for(int i = 0; i < 46;i++){ 
    String[] arrStr = File.ReadAllLines(path+"File_"+i+".txt") 
    List<String> output = new List<String>(); 
    for(j = 0;j< arrStr.Length;j++){ 
     //Do Something 
     output.Add(someString); 
    } 
    File.WriteAllLines(path+"output_File_"+i+".txt",output.toArray()); 
    output.Clear(); 
} 

每個txt文件大約有20K貨。函數打開他們的46,我需要運行的功能超過1K次,所以我打算離開程序在一夜之間運行,到目前爲止我沒有發現任何錯誤,但由於在循環的每次交互中引用了一個20k大小的字符串數組,因此恐怕可能存在垃圾問題內存被累積起來或者在過去的交互中來自陣列。如果存在這樣的風險,在這種情況下哪種方法最好處置舊陣列? 另外,同時運行3個這樣的程序是否安全?

+0

您可以使用'列表輸出=新列表(arrStr.Length);'來優化這一點。但沒有問題。每次運行3次可能會比順序運行慢。 –

回答

1

使用Streamsusing這將處理內存管理爲您提供:退出using塊時,釋放使用的任何內存

for (int i = 0; i < 46; i++) 
{ 
    using (StreamReader reader = new StreamReader(path)) 
    { 
     using (StreamWriter writer = new StreamWriter(outputpath)) 
     { 
      while(!reader.EndOfStream) 
      { 
       string line = reader.ReadLine(); 
       // do something with line 
       writer.WriteLine(line); 
      } 
     } 
    } 
} 

StreamReaderStreamWriterDispose方法被自動調用。使用流也可以確保您的整個文件不會一次存儲在內存中。在MSDN - File Stream and I/O

1

更多信息聽起來像是你從C世界來到:-)
C#垃圾回收是好的,你不會有任何問題。

我會更擔心文件系統錯誤。