|
Тема |
Re: Странно управление на паметта [re: nmm] |
|
Автор |
andrew_nikoloff (bugbuster) |
|
Публикувано | 16.12.09 13:26 |
|
|
Мда, прав си за IBX компонентите. Проблема в твоя случай не е memory leak, заради който да нямаш свободна памет, а това, че паметта ти е фрагментирана. В този случай можеш да имаш гигабайт свободна памет, но да няма 1 мегабайт последователна (т.е. едно цяло непрекъснато парче).
При IBX-а BufferChunks указва един вид с колко да се увеличи буфера (с памет за колко на брой записа) след като се изчерпа стария. Тъпото в случая (а и от embracadero си е, че след изчерпване на буфера не се заделя нов такъв от XXXX BufferChunks, който да допълни текущия, а се заделя един нов буфер с размер на текущия плюс BufferChunks и съдържанието на стария се прехвърля в новия. Това именно води до фрагментацията на паметта.
Имаш два варианта за борба с този проблем (без да броим преминаването към FIB Plus ). Първият е, където е възможно да включиш UniDirectional пропъртито да е True. По този начин няма да можеш да се разхождаш из дейтасета, а ще може да се обхожда само напред. В този случай не се прави такъв голям буфер, а се пази памет само за текущия запис. Подходящо е, ако ще правиш някакви сметки с данните или просто искаш да извлечеш резултат (и например да го напълниш после в някакъв друг in-memory dataset, с който да работиш). Вторият вариант е да си смениш memory manager-а. Препоръчвам ти . Новите версии на Делфи (от 2006 май) използват него. Това може да подобри донякъде ситуацията с фрагментирането на паметта. А и като цяло е по-добър и можеш да забележиш дори и значително подобрение в производителността на приложението ти само с подмяната на memory manager-а.
Малко объркано стана. Нещо не съм в час напоследък. Имам нужда от една хубава коледна ваканция, но се надявам да съм ти бил полезен със словоизлиянията си
Linux isn't free, it's worthless.
|
| |
|
|
|