Поедание оперативной памяти - C#

Узнай цену своей работы

Формулировка задачи:

Доброго всем дня! Есть программка, выгружающая в txt-файлик фио-логин пользователей из Active Directory. 2 цикла от "a" до "z" перебирают логины типа "aa...", "ab..." и так далее до "zz..." и записывают результаты в файл построчно командой sw.WriteLine(displayName + "\t" + sAMAccountName); где sw - объект StreamWriter. За время работы программа "отъедает" до 300МБ оперативки, хотя итоговый файл меньше мегабайта. Вопрос: как чистить память (какой элемент ее так грузит)? Код взят и преобразован отсюда. Собственно, мой код:
private void button1_Click(object sender, EventArgs e)
{
// Объявляем переменную, хранящую путь к файлу
string path = "C:\\FIO-login.txt";
            
// Считываем начальное имя папки и путь к ней
string Path1 = Convert.ToString(textBoxPath.Text);
// Задаем переменную с информацией о папке
DirectoryInfo diTarget = new DirectoryInfo(Path1);
// Задаем переменную, в которой будет храниться путь
DirectoryInfo DirFrom = new DirectoryInfo(Path1);
// Записываем путь
try
{
   // Если папка существует
   if (DirFrom.Exists)
   {
      // Указываем файл
      path = "FIO-login.txt";
      // Path.Combine(Path1, path);
      path = Path1 + "\\" + path;
      }
   else
   {
       // Сообщение о том, что папка не существует
       MessageBox.Show("Такой папки не существует", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
}
catch (Exception exc)
{
   MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
 
try
{
   // Создание файла и запись в него
   StreamWriter sw = File.CreateText(path);
   string sAMAccountName;
   string displayName;
 
   DirectoryEntry de = new DirectoryEntry("LDAP://DC=msk,DC=aeroflot,DC=ru");
   DirectorySearcher deSearch = new DirectorySearcher(de);
   deSearch.SearchScope = SearchScope.Subtree;
 
   progressBar1.Maximum = 26;
   progressBar1.Value = 0;
 
   for (int i = 97; i < 97 + 26; i++)
   {
    progressBar1.Value++;
 
    labelProgress.Text = "\nПрогресс для буквы \" " + Convert.ToChar(i) + " \"";
    for (int j = 97; j < 97 + 26; j++)
    {
       deSearch.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" + Convert.ToChar(i) + Convert.ToChar(j) + "*))";
       SearchResultCollection result = deSearch.FindAll();
 
       // Сбрасываем ProgressBar в ноль
       progressBar2.Value = 0;
       // Выставляем новый максимальный результат
       progressBar2.Maximum = result.Count;
 
       for (int x = 0; x < result.Count; x++)
       {
          progressBar2.Value++;
 
          sAMAccountName = Convert.ToBoolean(result[x].Properties["sAMAccountName"].Count > 0) ? result[x].Properties["sAMAccountName"][0].ToString() : "";
          displayName = Convert.ToBoolean(result[x].Properties["displayName"].Count > 0) ? result[x].Properties["displayName"][0].ToString() : "";
 
           sw.WriteLine(displayName + "\t" + sAMAccountName);
        }
     }
  }
}
catch (Exception ex)
{
   MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
 
labelProgress.Text = "Готово";
}

Решение задачи: «Поедание оперативной памяти»

textual
Листинг программы
MessageBox.Show(ex.ToString(),

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы