Размер структуры в памяти

1. Evgeny256 04.05.12 12:12 Сейчас в теме
Например создал я ТаблицуЗначений и добавляю в неё строки. Как узнать - сколько места в памяти занимает эта таблица? Или выполнил Запрос - тоже хочется знать сколько памяти выделено под него?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ёпрст 1063 04.05.12 13:09 Сейчас в теме
Посчитай.
И учти, если в ТЗ будут типизированные колонки, памяти она будет в разы меньше отъедать, чем не типизированная.
3. Dmitr033 131 04.05.12 13:44 Сейчас в теме
Для хранения таблиц значений и результатов запросов используются временные таблицы, так что выяснять сколько они занимают памяти смысла не имеет.
5. Evgeny256 04.05.12 14:04 Сейчас в теме
(3) Dmitr033, Очень даже имеет смысл. Вот смотрю в диспетчере задач - процесс 1С у одного пользователя занял памяти 51104 Кб, а у другого 190556 Кб. Потому что у второго в глобальном модуле создаются и висят три таблицы значений. И мне хочется как-то оптимизировать эти таблицы, а для этого нужно уметь подсчитать размер каждой таблицы.
6. Dmitr033 131 04.05.12 14:21 Сейчас в теме
(5) Evgeny256, Как это происходит в СКЛ не проверял, но в дбф варианте - создаются дбф файлы, а уж какая их часть подгружена в память, а какая выгружена на диск это вопрос к ОС.
Другое дело, что таблицы значений в глобальном модуле это методологически не правильно, может алгоритм нужно оптимизировать.
7. Ёпрст 1063 04.05.12 14:35 Сейчас в теме
(5) для начала, типизируй все колонки этих ТЗ.
4. Evgeny256 04.05.12 14:00 Сейчас в теме
Неприкольно считать. В ячейках могут быть строки разной длины. И в общем случае значения разного типа.

К тому же не факт, что общий размер, занимаемый таблицей в памяти, будет равен сумме размеров данных в ячейках таблицы. Может быть значительно больше.
8. Ёпрст 1063 04.05.12 14:36 Сейчас в теме
+ проще держать в сторонней табличке, чем ТЗ в памяти: во временной табличке в скуле или в sqllite базе, если база в дбф варианте
9. Sergius79 04.05.12 16:41 Сейчас в теме
Мдяя, а я то думал времена 64К памяти прошли... Самое главное чистить временные объекты за собой! Тогда и не надо будет заморачиваться с выделением памяти.
10. пользователь 07.05.12 15:17
Сообщение было скрыто модератором.
...
11. dusha0020 1106 08.05.12 00:13 Сейчас в теме
Ну давайте и я свои 5 копеек нарисую:)
Конечно, все высказавшиеся правы - узнать объем памяти выделяемый под конкретный объект в 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 Тогда
		Возврат;
	КонецЕсли;
        Сообщить("Запрос занял в памяти:"+Строка(ПамятьДо - ОбъемСвободнойПамяти())+" байт.");

Для ТЗ:
  ПамятьДо = ОбъемСвободнойПамяти();
	Клон = СоздатьОбъект("ТаблицаЗначений");
	НужнаяТЗ.Выгрузить(Клон);
        Сообщить("НужнаяТЗ заняла в памяти:"+Строка(ПамятьДо - ОбъемСвободнойПамяти())+" байт.");

Так как объем свободной памяти величина переменная во времени, то для запросов (длительных по времени формирования) точности особой не будет. А вот при клонировании ТЗ можно увидеть довольно точную оценку ее исходного объема...
Elvisnya; MaxDavid; +2 Ответить
12. пользователь 08.05.12 13:02
Сообщение было скрыто модератором.
...
13. brunet 39 18.06.12 20:46 Сейчас в теме
например если колонка Строка 50 символов то она и в памяти будет занимать 50 символов хотя может быть и пустой
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот