Страница 1 из 1

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

Добавлено: Пн 22 апр 2019 13:25
x_art
Версия 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". Это ожидаемое поведение?

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

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