|
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
|
||||||
Как уменьшить объём потребляемой оперативной памяти?19.06.2017, 06:29. Показов 2224. Ответов 10
Используется
C# MySql При добавлении в таблицу MySql новых записей растёт потребление оперативной памяти. Код Кликните здесь для просмотра всего текста
Вопрос Как уменьшить объём потребляемой оперативной памяти? Дополню: при добавлении записей с использованием MySqlParameter увеличение потребления оперативной памяти не происходит.
0
|
||||||
| 19.06.2017, 06:29 | |
|
Ответы с готовыми решениями:
10
Как уменьшить количество потребляемой памяти Как узнать объем оперативной памяти через реестр? (не используя сторонних программ) |
|
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
|
|
| 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
|
|||||||||||||
|
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
|
||
| 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
|
||
|
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
|
|
| 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
|
||||||||
|
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
|
|
| 21.06.2017, 18:55 | |
|
zakaz_77, ну, в случае с кодом из поста #4 можно было бы работать с БД напрямую через ADO.NET, без всяких DataTable и DataAdapter. Более того, ваш код демонстрирует некую разновидность наркомании: вы сначала выполняете запрос (с косвенным получением данных драйвером СУБД), потом ещё один (строго тот же самый, но с полной загрузкой данных, в виде
Fill()), и потом просто заносите данные в полученную таблицу с последующим сохранением в БД.Самая первая оптимизация, что приходит на ум - подключение головного мозга к "обмозговыванию" кода и получению ответа на вопрос: какго хрена нужно дважды загружать некие данные, чтобы просто добавить в БД новые данные не имеющие отношения к загруженным? Возможно после этого ваша программа станет меньше потреблять памяти...
0
|
|
| 21.06.2017, 18:55 | |
|
Помогаю со студенческими работами здесь
11
Узнать, какой объём оперативной памяти занимает приложение
Помогите уменьшить объем потребляемой ОЗУ Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия? Увеличение потребляемой оперативной памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|