Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1108559757
mr-jack
2005-02-16 16:15
2005.03.06
PrintDialog и конструкция try...end;


1-1108998536
Leksey
2005-02-21 18:08
2005.03.06
Как удалить ненужный TabSheet из PageControl?


1-1108747618
Kolan
2005-02-18 20:26
2005.03.06
Внешний вид формы при изменении шрифта Windows.


1-1108827395
AlexDid
2005-02-19 18:36
2005.03.06
IP-адрес компутера


4-1106841092
Maksym
2005-01-27 18:51
2005.03.06
Mozilla Thunderbird + Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский