По теме из базы знаний
- Эффективная обработка данных в оперативной памяти за счет использования коллекции "соответствие"
- Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
- Эффективное управление фоновыми заданиями и коммуникация сеансов сервера с Фоном с помощью Структуры обмена (ноу-хау) + Бонус: Альтернативный вариант через Хранилище настроек
- Проблемы на ровном месте, или рассказ о том, как у нас каждое утро стабильно подвисал dev-сервер 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Dmitr033, Очень даже имеет смысл. Вот смотрю в диспетчере задач - процесс 1С у одного пользователя занял памяти 51104 Кб, а у другого 190556 Кб. Потому что у второго в глобальном модуле создаются и висят три таблицы значений. И мне хочется как-то оптимизировать эти таблицы, а для этого нужно уметь подсчитать размер каждой таблицы.
(5) Evgeny256, Как это происходит в СКЛ не проверял, но в дбф варианте - создаются дбф файлы, а уж какая их часть подгружена в память, а какая выгружена на диск это вопрос к ОС.
Другое дело, что таблицы значений в глобальном модуле это методологически не правильно, может алгоритм нужно оптимизировать.
Другое дело, что таблицы значений в глобальном модуле это методологически не правильно, может алгоритм нужно оптимизировать.
Неприкольно считать. В ячейках могут быть строки разной длины. И в общем случае значения разного типа.
К тому же не факт, что общий размер, занимаемый таблицей в памяти, будет равен сумме размеров данных в ячейках таблицы. Может быть значительно больше.
К тому же не факт, что общий размер, занимаемый таблицей в памяти, будет равен сумме размеров данных в ячейках таблицы. Может быть значительно больше.
Ну давайте и я свои 5 копеек нарисую:)
Конечно, все высказавшиеся правы - узнать объем памяти выделяемый под конкретный объект в 1С невозможно, но ситуация не столь безнадежна, как описывалось. В принципе можно узнать в любой момент объем свободной памяти ОЗУ и если такие замеры производить перед и после создания объекта, то порядок потребления памяти можно увидеть.
Собственно сама функция, получающая объем свободной памяти ОЗУ:
Ну а ее использование в контексте выглядит примерно так.
Для запроса:
Для ТЗ:
Так как объем свободной памяти величина переменная во времени, то для запросов (длительных по времени формирования) точности особой не будет. А вот при клонировании ТЗ можно увидеть довольно точную оценку ее исходного объема...
Конечно, все высказавшиеся правы - узнать объем памяти выделяемый под конкретный объект в 1С невозможно, но ситуация не столь безнадежна, как описывалось. В принципе можно узнать в любой момент объем свободной памяти ОЗУ и если такие замеры производить перед и после создания объекта, то порядок потребления памяти можно увидеть.
Собственно сама функция, получающая объем свободной памяти ОЗУ:
Функция ОбъемСвободнойПамяти()
//Возвращает размер свободной ОЗУ (байт)
Скрипт = "
|Function FreeMemory()
|strComputer = "".""
|Set objWMIService = GetObject(""winmgmts:\\"" & strComputer & ""\root\CIMV2"")
|Set colItems = objWMIService.ExecQuery(""SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory"",,48)
|For Each objItem in colItems
| FreeMemory = objItem.AvailableBytes
|Next
|End Function
|";
ИспСкрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
ИспСкрипт.Language="vbscript";
ИспСкрипт.AddCode(Скрипт);
Возврат Число(ИспСкрипт.Modules("Global").CodeObject.FreeMemory());
КонецФункции
ПоказатьНу а ее использование в контексте выглядит примерно так.
Для запроса:
ПамятьДо = ОбъемСвободнойПамяти();
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Сообщить("Запрос занял в памяти:"+Строка(ПамятьДо - ОбъемСвободнойПамяти())+" байт.");
Для ТЗ:
ПамятьДо = ОбъемСвободнойПамяти();
Клон = СоздатьОбъект("ТаблицаЗначений");
НужнаяТЗ.Выгрузить(Клон);
Сообщить("НужнаяТЗ заняла в памяти:"+Строка(ПамятьДо - ОбъемСвободнойПамяти())+" байт.");
Так как объем свободной памяти величина переменная во времени, то для запросов (длительных по времени формирования) точности особой не будет. А вот при клонировании ТЗ можно увидеть довольно точную оценку ее исходного объема...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот