Re[2]: WideStrig and Leaks Помогите пожалуйста
От: vasmann  
Дата: 10.04.06 13:40
Оценка:
Здравствуйте, Closer, Вы писали:

C>Здравствуйте, vasmann, Вы писали:


V>>Доброго времини суток.

V>>Вы не могли бы помочь вот в таком деле:
V>>Создать обыкновенное приложение, в одном из методов вставить приблизительно такой код:
V>>procedure Test;
V>>var
V>> ws: WideString;
V>> StringIndex: Integer;
V>>const
V>> BIG_STRING: WideString = '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890' +
V>> '123456789012345678901234567890123456789012345678901234567890';
V>> STRINGS_COUNT = 1000;
V>>begin
V>> for StringIndex := 0 to STRINGS_COUNT — 1 do
V>> begin
V>> ws := ws + BIG_STRING;
V>> end;
V>> ws := '';
V>>end;

V>>Я знаю, код примитивный, но у меня он сьедает около 40Мб памяти. Я в полном замешательстве. Я знаю что принципы хранания String и WideString различны,

V>>что при присвоении одного вайдстринга создается еще один, и в принципе логично куда уехало ~40МБ но вопрос, как мне эти 40Мб вернуть на родину?
V>>Блин может я совсем уже запарился.
V>>Спасибо.

C>Попробуй вот такую команду, у меня после её выполнения в Delphi 5 размер отедаемой прогой памяти по показаниям Task Manager заметно уменьшался.


C>
C>    // Уменьшаем размер памяти занимаемый программой
C>    SetProcessWorkingSetSize (GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
C>


Судя по всему это помогает, по крайней мере при помощи этой функции память и виртуальная и обычная освобождаются. Но теперь второй вопрос, если у меня например рабочий обьем памяти порядка 150Мб, то наверно не стоит часто вызывать эту функцию.
В любом случае огромное спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.