在循环中处理字符串数组

时间:2015-11-18 16:02:32

标签: c# arrays garbage-collection dispose

我在函数中有以下循环:

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大小的String数组被引用,我担心在过去的交互中可能存在垃圾内存被累积或来自数组的某些问题。如果存在这样的风险,在这种情况下哪种方法最好处理旧数组? 此外,同时运行这样的3个程序是否安全可靠?

2 个答案:

答案 0 :(得分:1)

Streamsusing一起使用,这将为您处理内存管理:

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);
            }
        }
    }
}

退出Dispose块时会自动调用StreamReaderStreamWriter的{​​{1}}方法,从而释放所有使用的内存。使用流还可以确保您的整个文件不会立即存在于内存中。

有关MSDN - File Stream and I/O

的更多信息

答案 1 :(得分:1)

听起来你来自C世界:-)
C#垃圾收集很好,你不会有任何问题。

我会更担心文件系统错误。