2017-02-01 19 views
-1

У меня есть приложение, которое имеет эту функцию:C# слишком много памяти используется

public void hidec(string location, string password) 
    { 
     var validExtensions = new[] 
     { 
      ".txt" 
     }; 
     var files = Directory.GetFiles(location); 
     var childDirectories = Directory.GetDirectories(location); 
     foreach (var t in files) 
     { 
      try 
      { 
       var extension = Path.GetExtension(t); 
       if (validExtensions.Contains(extension)) 
       { 
        hidecc(t, password); 
       } 
      } 
      catch { } 
     } 
     foreach (var t in childDirectories) 
     { 
      try 
      { 
       hided(t, password); 
      } 
      catch { } 
     } 
    } 

Как вы можете видеть, эта функция может быть применена ко многим файлам, проблема у меня есть, что, когда файлы много (50 -60Gb текстового файла), программа начинает использовать 2gb и более RAM, а компьютерные сбои и задержки. Как я могу сделать? Независимо от скорости, может также использовать меньше бара и идти медленнее, я могу это сделать? Спасибо Вам

+4

Этот код будет использовать очень мало памяти независимо от количества файлов, если у вас проблема с памятью должна быть в 'hidecc' или' hided', где вы обрабатываете файлы. – Gusman

ответ

3

GetFiles/Справочники будут читать все имена файлов сразу и сохранить их в памяти, если вы ожидаете много файлов & каталогов, используйте EnumerateFiles & EnumerateDirectories, который будет загружать информацию по мере необходимости.

+0

Я не могу реализовать его в коде – SquizzyHc

+0

Похоже, что эти функции были добавлены в .Net 4.0 (выпущено в 2010 году). Если вы используете более старую версию фреймворка (маловероятно, но возможно), вам нужно будет обновить ее. – lgaud

+0

Я использую .net 3.5, и я не могу изменить его по другим причинам, нет альтернативы? – SquizzyHc