Поедание оперативной памяти - 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(),