Поедание оперативной памяти - 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(),
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д