Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизКак освободить ресурсы занятые функцией StringToOleStr? Найти похожие ветки
← →
Sour Smile (2005-02-21 10:53) [0]Диспетчер задач, показывает увеличение занимаемой виртуальной памяти приложением на 84 Мб, при каждом нажатии кнопки с таким обработчиком:
procedure TForm1.Button1Click(Sender: TObject);
var
pw: PWChar;
i: Integer;
begin
for i := 0 to 1000000 do pw := StringToOleStr("qwertyuiopasdfghjklzxcvbnm");
end;
Ясно, что нужно реcурсы после использования освобождать... но как?
В хэлпе об этом ни слова не написано, FreeMem генерирует ошибку...
← →
Johnmen © (2005-02-21 11:22) [1]Забавно... И куда, как ты предполагаешь, будет указывать pw при окончании цикла, и куда денутся результаты его работы ?
:)))
Вобщем, освободить не сможешь 999999, т.к. указатели утеряны...
← →
Sour Smile (2005-02-21 11:35) [2]Я это прекрасно понимаю - имелось ввиду какой функцией/процедурой следует освобождать занятые ресурсы. Другими словами: какая функция/процедура пропущена в цикле, которая вернёт занятые ресурсы. Или другими словами: какая функция/процедура скрывается под словом Освободить в нижеследущем коде:
procedure TForm1.Button2Click(Sender: TObject);
var
pw: PWChar;
i: Integer;
begin
for i := 0 to 1000000 do
begin
pw := StringToOleStr("qwertyuiopasdfghjklzxcvbnm");
/// Используем pw
Освободить(pw);
end;
end;
← →
Набережных С. © (2005-02-21 11:45) [3]SysFreeString. В ActiveX и Ole2 она объявлена с параметром PWideChar. Можно использовать и объявление в System, но придется приводить типы.
← →
Sour Smile (2005-02-21 11:54) [4]
> Набережных С. © (21.02.05 11:45) [3]
Огромное спасибо - это действительно "она" :)
Кстати в инете полно примеров использующих функцию StringToOleStr, но не освобождающих за ней ресурсы... Для меня же очень критично, если в моих приложениях имеются "утечки памяти".
← →
Johnmen © (2005-02-21 12:08) [5]>Sour Smile (21.02.05 11:54) [4]
>Кстати в инете полно примеров использующих функцию
>StringToOleStr, но не освобождающих за ней ресурсы...
Это, видимо, потому, что они освободятся менеджером при завершении работы приложения.
← →
Sour Smile (2005-02-21 12:54) [6]
> Johnmen © (21.02.05 12:08) [5]
> Это, видимо, потому, что они освободятся менеджером при
> завершении работы приложения.
??? Дык, ИМХО, при завершении работы приложения все занятые им ресурсы освобождаются.
Важно же не чтобы при завершении приложения освобождались ресурсы, а когда в них больше нет необходимости - иначе при безостановочной (автономной) работе приложения, неминуемы "утечки памяти", что чревато понятно чем...
← →
Набережных С. © (2005-02-21 13:12) [7]
> Johnmen © (21.02.05 12:08) [5]
Тогда, видимо, и FreeMem не нужна? А зачем, если при закрытии приложение все и так освободится?
> Sour Smile (21.02.05 12:54)
Лучше, по возможности, использовать WideString, а не PWideChar. И преобразование компилятор производит автоматически, и память сам освобождает.
← →
Johnmen © (2005-02-21 13:17) [8]>Набережных С. © (21.02.05 13:12) [7]
Так он хочет по мере работы освобождать. В этом случае твой ответ верен...
← →
Набережных С. © (2005-02-21 13:42) [9]
> Johnmen © (21.02.05 13:17) [8]
Видимо, я тебя просто не правильно понял:(
← →
Sour Smile (2005-02-22 13:27) [10]
> Набережных С. © (21.02.05 13:12) [7]
> > Sour Smile (21.02.05 12:54)
>
> Лучше, по возможности, использовать WideString, а не PWideChar.
> И преобразование компилятор производит автоматически, и
> память сам освобождает.
Друг! И здесь ты абсолютно прав! :)
Я наконец выкроил время, чтобы разобраться с WideString (правда не без помощи CPU - очень удобная штука для понимания внутренних процессов приложения). Преимущества при использовании WideString "на лицо". :)
> Набережных С. © (21.02.05 11:45) [3]
> SysFreeString. В ActiveX и Ole2 она объявлена с параметром
> PWideChar. Можно использовать и объявление в System, но
> придется приводить типы.
А вот к этой функции из модуля System я добраться не смог... У меня (D6) эта функия объявлена только в секцииimplementation
... :(
Впрочем она мне уже не нужна - сейчас использую WideString. :)
← →
Набережных С. © (2005-02-22 13:46) [11]
> Sour Smile (22.02.05 13:27) [10]
> У меня (D6) эта функия объявлена только в секции implementation...
> :(
В D7 так-же. Писал по памяти, помню что она там есть, а вот где объявлена - забыл:)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c