Почти нашёл косяк. Переделывать под Делфи 7 я так и не решился, т.к. надо изучать новый компонент и отлаживаться на нём.
Сделал как ранее предлагал, вместо записи в Memo пишу в файл, вместо вызова GetMem(), заранее выделяю мегабайтный буфер и потом внутри него выдаю частями. Сделал обёртку GetMem() и FreeMem() для сбора статистики. В итоге обнаружилась своя утечка на ~50 МБ/сутки. Но не 300. Это было в поиске уникальных строк, шастая по быстрому дереву поиска, когда даже если строка полностью идентична, то создавались ненужные ветви дерева. Тогда как запланировано, что ветви дерева должны создаваться только для разделения уникальных строк. Короче, идя по дереву с новой строкой я зря создавал ветви "на лету", тогда как надо было сперва дойти до конца строки и только если она отлична, создавать. А 50 МБ превращалось в 300 уже наверно из-за фрагментации и постоянно увеличивающегося текста в Memo. По крайней мере, пока с моей утечкой 50 МБ и мегабайтными буферами не вижу доп.утечек.
Upd. Даже не 50, а примерно 20. И не утечка, а незапланированная и бесполезная трата памяти. В итоге что-то её увеличило в 10 с лишним раз.
Сообщение отредактировал GetSmart - Jan 25 2012, 20:07
--------------------
Заблуждаться - Ваше законное право :-)
|