Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
1

Забивается оперативная память

25.05.2011, 19:37. Показов 6354. Ответов 16
Метки нет (Все метки)

Здравствуйте...после нескольких раз загрузки большого количества данных из базы в datagrid оперативная память забивается вплоть до зависания программы...возможно ли сделать чтобы при закрытие формы данные с datagrid выгружались из оперативки???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2011, 19:37
Ответы с готовыми решениями:

Image и оперативная память
Добрый день. Мне нужно отобразить картинку в PictureBox. У меня вопрос, можно ли как-то уменьшить...

Оперативная память
Всем доброго времени суток! Подскажите как с помощью кода C# получить данные об оперативной...

Переменные и оперативная память
Всем привет! У меня появился небольшой вопрос про память. Когда создается переменная и в неё...

При сохранении снимка съедается оперативная память
Добрый день! Написал прогу которая подключается к камере, делает снимки и записывает их на комп...

16
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
25.05.2011, 20:00 2
Лучший ответ Сообщение было отмечено как решение

Решение

А можно конкретный кусок кода? Ну навскидку:
Dispose юзайте или:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Runtime.InteropServices; 
[DllImport("kernel32.dll")] 
 
public static extern bool SetProcessWorkingSetSize( IntPtr handle, 
int minimumWorkingSetSize, int maximumWorkingSetSize ); 
 
void ozu()
{
SetProcessWorkingSetSize( System.Diagnostics.Process.GetCurrentProcess().Handle, 
 
-1, -1 ); 
}
 
//Вызываем ozu();
8
1266 / 967 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
25.05.2011, 21:02 3
SetProcessWorkingSetSize
Слух это же офигенная штука, млин, гдеж ты раньше был?)

Оно же вычищает под ноль весь хлам, процесс который обычно в покое жрал 20 мб и в агрузке до 25 после нее жрет 10 и 15 соответственно
А бестолковый GC.Collect не в состоянии вычистить ни байта..
0
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
25.05.2011, 21:25 4
Не за что, пользуйтесь. Правда обсуждали на форуме (не нашёл сейчас где), что использовать данный код в циклах нельзя (лишнее выделение/очищение памяти). Говорил об этом SSTREGG, а ему уж верить можно. В общем пользуйтесь, но с умом.
P.S.:Данный код откопал в мануале по C# аж за 2002 (или 2003) год.
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
26.05.2011, 00:24  [ТС] 5
Цитата Сообщение от Oxygen Посмотреть сообщение
А можно конкретный кусок кода? Ну навскидку:
Dispose юзайте или:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Runtime.InteropServices; 
[DllImport("kernel32.dll")] 
 
public static extern bool SetProcessWorkingSetSize( IntPtr handle, 
int minimumWorkingSetSize, int maximumWorkingSetSize ); 
 
void ozu()
{
SetProcessWorkingSetSize( System.Diagnostics.Process.GetCurrentProcess().Handle, 
 
-1, -1 ); 
}
 
//Вызываем ozu();
Попробовал ваш пример в итого все равно оперативка забивается до предела при частом вызове формы, код этой формы выложил ниже. Из базы "baza" в таблицу загружается около 90000 записей.
0
Вложения
Тип файла: rar код.rar (26.1 Кб, 65 просмотров)
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
26.05.2011, 01:24 6

Не по теме:

Впредь код выкладывайте в форматах: *.cs или *.txt так как не все имеют у себя Microsoft Office (или имеют, но недолюбливают как в моём случае). Использование *.docx неоправданно, ибо код-это текст, а текст в *.docx весит в разы больше, нежели в *.cs или *.txt.


Ладно, что-то я отвлёкся, теперь по существу:
Если честно, то Ваш код заставил меня плакать кровавыми слезами... И вот почему:

1.Название переменных на Русском, я вижу Вы патриот, но в программирование это немного не уместно.

2.Вырвиглазный код, мало что понял в нём. Укажите после каких конкретно действий забивается ОЗУ.

Что лично Вам посоветую сделать:
-Возможно стоит добавить паузы System.Threading.Thread.Sleep(1000) (в это время сборщик мусора должен сработать, хотя точно не могу сказать).

-Попробуйте вызывать ozu не по нажатию кнопки, а после совершения действий/действия.

-Разбейте базу на части, ибо 90000 записей это многовато для одновременной обработки (хотя бы по 10000, пауза, затем следующие 10000).

-Циклы (Ответы на 7 самых частых вопросов по WinForms пункт "Как пройтись по всем однотипным контролам". в самом низу первого сообщения)

-Потоки (Пространство имён System.Threadings) если у Вас более 90000 записей, то ждать пока произойдёт поиск в основном потоке-чревато (приложение будет помечено как "Не отвечает").
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
26.05.2011, 03:57  [ТС] 7
1.Название переменных на Русском, я вижу Вы патриот, но в программирование это немного не уместно.
Сам в итоге об этом пожалел но переписывать всю базу было жалко
2.Вырвиглазный код, мало что понял в нём. Укажите после каких конкретно действий забивается ОЗУ.
Оперативка забивается во время вызова формы, скорей всего от загрузки базы в 90 к записей "this.bazaTableAdapter.Fill(this.neffDataSet.baza);"
-Разбейте базу на части, ибо 90000 записей это многовато для одновременной обработки (хотя бы по 10000, пауза, затем следующие 10000).
Я правильно понял создать 9 одинаковых таблиц в бд и заполнить по 10000 записей а потом по очереди загружать в датагрид?
Возможно ли разбить с помощью программных средств?
-Циклы (https://www.cyberforum.ru/wind... 10436.html пункт "Как пройтись по всем однотипным контролам". в самом низу первого сообщения)
Интересная фишка

Добавлено через 28 минут
-Возможно стоит добавить паузы System.Threading.Thread.Sleep(1000) (в это время сборщик мусора должен сработать, хотя точно не могу сказать).

-Попробуйте вызывать ozu не по нажатию кнопки, а после совершения действий/действия.
Попробовал никакой разницы формы хватает ровно на 10 вызовов потом не отвечает чтобы в vs остановить отладку приходилось ждать минут 5.
может не там вставил?
System.Threading.Thread.Sleep(1000) вставил перед
this.bazaTableAdapter.Fill(this.neffDataSet.baza);
а ozu в конце form_load
0
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
27.05.2011, 15:50 8
Как у Вас выглядит база? Можете хотя бы часть привести, может что придумаю.
0
581 / 368 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
27.05.2011, 16:52 9
Цитата Сообщение от F@llen Посмотреть сообщение
Здравствуйте...после нескольких раз загрузки большого количества данных из базы в datagrid оперативная память забивается вплоть до зависания программы...возможно ли сделать чтобы при закрытие формы данные с datagrid выгружались из оперативки???
Вообщем посмотрел ваш код....

1) Очень много лишней архитектуры.
DataSet очень удобен но очень оргомен. Всегда можно обойтись без него.
2) Зачем вам одномоментно 90000 записей? Они в экран все равно не уместятся. Запрашивайте по 500-1000 записей за раз. Оптимально. Во всех db менеджерах запрашивается по 500-1000 записей за раз.
3) Используйте Dispose() для освобождения ресурсов.
4) Зачем Word? Проект что скинуть невозможно?

P.S. По сути можно реализовать только П2 и этого будет достаточно
0
Oxygen
27.05.2011, 17:03
  #10

Не по теме:

sigmov, Вы вообще читаете ветку форума прежде чем написать в ней? Зачем повторять уже сказанное?
Простите за оффтоп.

1
184 / 187 / 17
Регистрация: 26.11.2010
Сообщений: 511
27.05.2011, 18:12 11
Цитата Сообщение от Oxygen Посмотреть сообщение
public static extern bool SetProcessWorkingSetSize( IntPtr handle,
int minimumWorkingSetSize, int maximumWorkingSetSize );
Это - божественно.
0
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
28.05.2011, 09:22 12
Killster, убил... =)
F@llen, выложите часть базы, есть желание Вам помочь.
P.S.:Можете связатся со мной в личке, оставлю свои контакты.
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
28.05.2011, 21:28  [ТС] 13
Цитата Сообщение от Oxygen Посмотреть сообщение
Killster, убил... =)
F@llen, выложите часть базы, есть желание Вам помочь.
P.S.:Можете связатся со мной в личке, оставлю свои контакты.
Формат базы .sdf
0
Вложения
Тип файла: rar Neff.rar (14.8 Кб, 14 просмотров)
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
29.05.2011, 10:18 14
Никогда не работал с таким типом баз данных, ничем не могу помочь. Извините.
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
01.06.2011, 05:35  [ТС] 15
Спасибо за помощь удалось решить проблему с помощью DataSet.Clear();:dance3:
0
55 / 44 / 5
Регистрация: 29.07.2009
Сообщений: 159
01.06.2011, 10:19 16
Сегодня, 05:35... Вы бы спали побольше, не всё же программить! =)
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 11
01.06.2011, 20:45  [ТС] 17
Цитата Сообщение от Oxygen Посмотреть сообщение
Сегодня, 05:35... Вы бы спали побольше, не всё же программить! =)
На дипломе можно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2011, 20:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Забивается оперативная память
Итак, проблема в том, что без причины забивается оперативка. Даже в режиме простоя, после...

Забивается оперативная память
Доброй ночи, уважаемые. Последние трое суток оперативная память после включения ноутбука сразу...

Забивается оперативная память (Win 8.1)
Друзья нужна помощь, вообщем если комп работает целый день, то к вечеру память забивается до 80%,...

Невероятно сильно забивается оперативная память
Не понимаю, как она может так забиваться. Завершил все самые требовательные процессы, но легче не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.