Большое потребление памяти

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Ответить
x_art
Сообщения: 1
Зарегистрирован: Пн 22 апр 2019 13:14

Большое потребление памяти

Сообщение x_art » Пн 22 апр 2019 13:25

Версия 7.4.12

Имеем таблицу в MSSQL c 24-мя колонками и 7 млн. строк.
TUniTable
FetchAll := false;
FetchRows := 100;
SmartFetch.Enabled := true;
SmartFetch.LiveBlock := true;
KeyFields := 'ID'; // число DECIMAL(10)

При открытии таблицы (InternalOpen), компонент пытается считать в память все ключевые значения (еще до чтения строк с данными), но при этом в памяти выделяет место как-будто для всей строки (522 байта на строку данных). Естественно через некоторое время вываливается с ошибкой "out of memory". Это ожидаемое поведение?

Stellar
Devart Team
Сообщения: 12
Зарегистрирован: Чт 07 дек 2017 14:56

Re: Большое потребление памяти

Сообщение Stellar » Чт 25 апр 2019 15:27

При активной опции SmartFetch, UniDAC выполняет предварительный запрос на сервер, для построения списка значений ключевых полей. Если первичным ключом является поле типа DECIMAL(10), тогда список значений первичных ключей не будет занимать большого объема оперативной памяти. В режиме SmartFetch UniDAC не выделяет буфер для всех записей К сожалению, мы не можем воспроизвети проблему с "out of memory" в режиме SmartFetch.
Пожалуйста, составьте небольшой пример для ее воспроизведения с использованием стандартных Data Controls (TDBGrid, TDBEDit и пр.) и пришлите нам для исследования. Пример вы можете прислать, используя форму контакта на нашем сайте: http://www.devart.com/company/contactform.html

Ответить