При нажатии на "кнопку" программа выполняет несколько процедур. В одной из них (*) создаётся и заполняется 150 объектов List<string>, затем, этими данными заполняется объект DataTable. В конце, глобально объявленным объектам задаются начальные значения и происходит отчистка от мусора.
При последующих нажатиях на "кнопку", во время выполнения той самой процедуры (*) процессор сильно загружается и программа выполняется в 20-25 раз дольше по времени.
Добавлю, что после запуска программа занимает 10 МБ, после нажатия на "кнопку" - 30 МБ, а после отчистки от мусора - 17 МБ.
Пытался по-разному вернуть память в состояние как после запуска программы, (думаю, проблема в этом) - без результатно.
Подскажите, в чём может быть проблема и где капать?
P.S. при повторном вызове аналогичной процедуры, только где 30 объектов List<string>, такой проблемы не наблюдается.
Примечание:
Релиз вроде как тут не сделать (VS Express 2010)
Код выложить проблемно, т.к. очень большой, но в катце опишу:
void func()
{
// 1. Создаём 150 объектов (Уже здесь программа начинает тормозить
List<String> col_1 = new List<string>();
...
List<String> col_150 = new List<string>();
// 2. Создаём 150 столбцов в DataTable (Глоб. объявл.)
MyTable.Columns.Add("col_1");
...
MyTable.Columns.Add("col_150");
// 3. Заполняем 10 раз эти List<String>
for (j = 0; j < 10; j++)
{
// 3.1. Заполняем каждый List<String>
for (i = 0; i < 47; i++)
{
col_1.Add("qwe");
...
col_150.Add("qwe");
} // - по i
} // - по j
// заполняем таблицу
MyTable.Rows.Add(col_1, ..., col_150);
// дописываем эту таблицу к результирующей
resultTable.Merge(MyTable, true);
}
Как-то так)
Примечание:
Опечатался:
"} // - по j" - предпоследняя строка кода
Примечание:
atributz, к сожалению, в C# удалить эти объекты вручную как в С++, насколько мне известно, нельзя.
ВСЁ, РАЗОБРАЛСЯ!
Прошу прощения, что не внёс кое-какие подробности. Дело в том, что у меня открывались таблицы в DataGridView, о чём я забыл упомянуть. Отключение данной операции решило проблему, значит зря я грешил на List <string>.
Однако, всем спасибо за советы!
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.