2015-11-18 2 views
0

У меня есть следующий цикл внутри функции: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(); 
} 

Каждый текстовый файл имеет около 20k функции lines.The открывается 46 из них, и мне нужно, чтобы запустить функцию более 1k раз так, что я планирую оставить программу запущенной в течение ночи, до сих пор я не нашел никаких erros, но поскольку на каждом взаимодействии цикла имеется массив String размером 20k, я боюсь, что может возникнуть проблема с корзиной память накапливается или что-то из массивов в прошлых взаимодействиях. Если существует такой риск, какой метод лучше всего распорядиться старым массивом в этом случае? Кроме того, безопасна ли память для запуска трех программ, подобных этому одновременно?

+0

Это можно немного оптимизировать с помощью 'List output = new Список (arrStr.Length);'. Но проблем нет. Запуск 3 за раз, вероятно, будет медленнее, чем последовательный, показатель. –

ответ

1

Использование Streams с 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); 
      } 
     } 
    } 
} 

В Dispose методы StreamReader и StreamWriter автоматически вызываются при выходе из using блока, освобождая любую память, используемую. Использование потоков также гарантирует, что весь ваш файл не находится в памяти сразу.

Более подробная информация о MSDN - File Stream and I/O

1

Похоже, вы пришли из мира C :-)
коллекции # мусорных C нормально, вы не будете иметь никаких проблем с этим.

Я был бы более обеспокоен ошибками файловой системы.

Смежные вопросы