Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Вниз

Помогите, пожалуйста предотвратить утечку памяти.   Найти похожие ветки 

 
^Sanya   (2002-12-14 16:30) [0]

Как освободить объкт, созданный с помощью CreateOleObject ?

Пример:

var
ExcelApp: Variant;
begin
ExcelApp := CreateOleObject("Excel.Application");
try
...
finally
//как освободить ExcelApp, а то остаётся довольно большой процесс в памяти. Free, FreeAndNil не работают.
end;


В Справке написано "you can release the interface by assigning the Unassigned constant to that Variant."
Это как: "присвоить ExcelApp пустую константу"?

Заранее блгодарен.


 
sniknik   (2002-12-14 16:36) [1]

в примерах делают так
var
MSWord: Variant;
begin
...
MSWord := CreateOleObject("Word.Basic");
...
MSWord := Unassigned;
...

end;


 
^Sanya   (2002-12-14 16:51) [2]


> sniknik © (14.12.02 16:36)

Пример я давно видел, он, к сожалению, мне не помог.
Может это не мой глюк, но:
в XP я могу легко смотреть на список процессов.
При Unassigned и не только Excel.exe всё равно остаётся в процессах(примерно 8Мб занимает!), пока я его сам не "убью".
Может проблема в OfficeXP?
Можно легко "валить" процесс excel.exe, но это как-то не по-человечески...
Как же быть?
Пожалуйста, помогите, горю...


 
Song   (2002-12-14 16:55) [3]

А чем тебе критично что он останется?
UnAssigned вовсе не значит, что процесс удалится совсем, а значит что его адресное пространство теперь не закреплено и может заниматься по усмотрению системы (очень часто занимается тем же объектом Variant).


 
^Sanya   (2002-12-14 17:24) [4]


> Song © (14.12.02 16:55)

Мне-то ничем, просто я думал, что память остаётся зарезервированной.
Но дело ещё и в том, что при повторении операции создаются ещё новые процессы и замещения не происходит(10 раз подряд запустил и проверил).
У меня 512Мб RAM, может её много и каждый раз WinXP резервирует новое пространство?
И ещё: в мониторе состояния RAM последняя(свободное пространство) уменьшается на пару-тройку мегов с каждым проходом подпрограммы и тоже самое с файлом подкачки(увеличивается) => явно видны последствия нескольких процессов.

Ещё у меня есть строка
WorkSheet := ExcelApp.Workbooks[1].WorkSheets[1];
но по-моему, она тут не причём.

Как быть?
ИМХО, это критично.


 
asmith   (2002-12-14 17:46) [5]

ExcelApp.Quit; // закрываешь саму апликацию Excel
ExcelApp := Unassigned; // разрушаешь интерфейсную ссылку на нее


 
^Sanya   (2002-12-14 18:22) [6]


> asmith (14.12.02 17:46)

Огромное Вам спасибо!
Утечек больше нет.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-74587
@andrew
2002-11-19 17:32
2002.12.23
SQL. Замучился искать в доках!!! Хелп!!! Можно ли в переменную...


1-74842
olookin
2002-12-12 11:05
2002.12.23
Скобки


14-74888
vajo
2002-12-02 10:15
2002.12.23
Сеть


1-74774
iPasha
2002-12-11 10:13
2002.12.23
Проблема с DateTimePicker


8-74851
sad
2002-09-05 08:02
2002.12.23
Полигон в Teechart





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский