|
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
|
||||||
Как уменьшить объём потребляемой оперативной памяти?19.06.2017, 06:29. Показов 2200. Ответов 10
Используется
C# MySql При добавлении в таблицу MySql новых записей растёт потребление оперативной памяти. Код Кликните здесь для просмотра всего текста
Вопрос Как уменьшить объём потребляемой оперативной памяти? Дополню: при добавлении записей с использованием MySqlParameter увеличение потребления оперативной памяти не происходит.
0
|
||||||
| 19.06.2017, 06:29 | |
|
Ответы с готовыми решениями:
10
Как уменьшить количество потребляемой памяти Как узнать объем оперативной памяти через реестр? (не используя сторонних программ) |
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,981
|
|
| 19.06.2017, 07:36 | |
|
zakaz_77, метод
MySqlDtAdp_0.Fill() сам выполнит запрос, не нужно его явно перед этим выполнять (sqlCom_0.ExecuteNonQuery();).И кто вас научил такие беспонтовые имена сущностям давать? Давайте нормальные, осмысленные названия, а не всякую аббревиатуру как в конструкторской документации (dt_025, sqlCom_0). В чём выражается "потребление памяти"? Как это замерялось? На глаз, в Task Manager?
1
|
|
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
| 19.06.2017, 08:58 | |
|
Я тоже не увидел, в каком месте может такое уж большое увеличение памяти происходить.
Разве что в момент добавления строк в таблицу. Если это временная таблица - может быть есть смысл делать ей Dispose() в конце метода обновления. Все строки, что добавляются в цикле - после каждой итерации и так будут убираться чистильщиком. А так... ну фиг его знает.
1
|
|
|
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
|
|||||||||||||
| 21.06.2017, 12:24 [ТС] | |||||||||||||
|
- добавил цикл; - добавил Dispose(); Проблема осталась... Хотя может я неправильно делаю.. Буду признателен. если поправите Используем MySqlCommandBuilder КОД 1 Кликните здесь для просмотра всего текста
Также пробовал нижеприведённый код. При использовании его оперативка не растёт Использовать MySqlParameter КОД 2 Кликните здесь для просмотра всего текста
ВОПРОС. 1. В чём может быть проблема? 2. Может не стоит морочится и использовать код с MySqlParameter? Просто прочитал где-то здесь (Архитектура ПО в WinForms (FAQ & HowTo)), что сначало нужно обработать данные в программе, а потом отправлять в нужное место. Или я не правильно понял?
0
|
|||||||||||||
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,981
|
||
| 21.06.2017, 12:49 | ||
|
Воспользуйтесь профилировщиком для оценки реального расхода памяти. Или не грейте голову.
1
|
||
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
||
| 21.06.2017, 14:50 | ||
|
zakaz_77, Тут все очень запущено. На самом деле ни Вы , ни я точно не знаем, что зашито в коде адаптера, можем только пользоваться этим. Может быть там действительно косяк, который Вы и выявили. А дезасемблировать, чтобы докопаться - нафиг оно нужно
![]()
1
|
||
|
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
|
||
| 21.06.2017, 18:26 [ТС] | ||
|
Ну мне в принципе всё равно... Факт, то что у меня начнёт тормозить комп. Я правда не разгонял до максимума, но например если программе поставить задачу: добавить 30 000 строк, то результат роста ОЗУ будет выглядеть следующим образом. (см. скрин)
0
|
||
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,981
|
|
| 21.06.2017, 18:32 | |
|
zakaz_77, не совсем понятно, что вас удивляет. Вы нагружаете приложение данными, оно в ответ, выделяет память под эти данные. В чём противоречие? Не хотите расхода памяти - оптимизируйте код. Волшебства не бывает.
0
|
|
|
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
|
|
| 21.06.2017, 18:40 [ТС] | |
|
Usaga,
Прошу прощения, не совсем понимаю,в чём заключается оптимизация? В сообщении #4 я привёл два варианта кода - Используем MySqlCommandBuilder КОД 1 - потребляет ОЗУ - Использовать MySqlParameter КОД 2 - не потребляет ОЗУ ВОПРОС. 1. Можно ли сделать чтобы код "MySqlCommandBuilder КОД 1 " не потреблял ОЗУ?
0
|
|
|
|
||||||||
| 21.06.2017, 18:54 | ||||||||
|
Первый пример Абсолютно нечитаемый. Я несколько раз его прошёлся сверху вниз и Не понял что же задумано программистом, что должно делаться. Какой-то Биндинг который нигде вроде бы не используется, какие-то загрузки и не понятно в какую сторону всё выгружается. Вроде бы Fill из базы, ан нет, потом идёт сборка таблицы зачем то. И в конце вообще не вижу никакой записи никуда. Обрезан код? Сразу же увидел "код подозрительно похожий на ад".
2. А вот второй вариант абсолютно читаемый и почти идеальный. Конечно же он не будет ничего отжирать. Каждые данные постоянно закидываются в таблицу, наращивания нигде не происходит. Не вижу критичных проблем во втором примере, особенно, по сравнению с первым. Не помню какие есть возможности в MySQL, но в MsSQL можно использовать табличный параметр и сразу одним запросом всё закинуть, чтобы туда-сюда не бегать. Если такого нет, то можно максимально наращивать INSERT запрос и потом тоже оптом кидать. Короче избегать количественного обмена. Моё мнение - второй пример должен быть рабочим, в рамках задачи и быстрого решения. Добавлено через 2 минуты Наверняка можно, но нужно тогда понять зачем это всё там понаписано. Например с какой целью используется MySqlCommandBuilder?
0
|
||||||||
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,981
|
|
| 21.06.2017, 18:55 | |
|
zakaz_77, ну, в случае с кодом из поста #4 можно было бы работать с БД напрямую через ADO.NET, без всяких DataTable и DataAdapter. Более того, ваш код демонстрирует некую разновидность наркомании: вы сначала выполняете запрос (с косвенным получением данных драйвером СУБД), потом ещё один (строго тот же самый, но с полной загрузкой данных, в виде
Fill()), и потом просто заносите данные в полученную таблицу с последующим сохранением в БД.Самая первая оптимизация, что приходит на ум - подключение головного мозга к "обмозговыванию" кода и получению ответа на вопрос: какго хрена нужно дважды загружать некие данные, чтобы просто добавить в БД новые данные не имеющие отношения к загруженным? Возможно после этого ваша программа станет меньше потреблять памяти...
0
|
|
| 21.06.2017, 18:55 | |
|
Помогаю со студенческими работами здесь
11
Узнать, какой объём оперативной памяти занимает приложение
Помогите уменьшить объем потребляемой ОЗУ Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия? Увеличение потребляемой оперативной памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|