Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему Outlook остается в памяти после закрытия?

4.9K
03 марта 2004 года
e_s
12 / / 24.02.2004
На сайте microsoft сказано, что это при работе с Explorer-ом или Inspector-ом. Что мол нужно при событии close делать Explorer = Nothing. Делаю то же самое - не выгружается
258
03 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by e_s
На сайте microsoft сказано, что это при работе с Explorer-ом или Inspector-ом. Что мол нужно при событии close делать Explorer = Nothing. Делаю то же самое - не выгружается



Мало информации, покажи свой код.
Что касается Nothing, то это относится к любым объектам к которым ты получаешь доступ через CreateObject/GetObject.

Смысл такой: для окончания работы с объектом необходимо обнулить (=Nothing) ВСЕ объектные переменные указывающие на этот объект, потому что каждый раз когда указываешься какой-нибудь переменной на объект, то у объекта внутренний счетчик увеличивается на 1, когда ты делаешь =Nothing своей переменной у объекта счетчик уменьшается на 1. Вот, и пока счетчик объекта не станет равным нулю, windows не будет выгружать объект из памяти и он будет висеть в памяти.

Мораль - следите за своими ссылками-переменными и не забывайте обнулять их все.

Типичный пример ошибки:

Код:
Dim AppExl as Object
Dim wrBook as Object

Set AppExl = CreateObject("Excel.Application")
Set wrBook = AppExl.Workbooks.Add
........
........
wrBook.Save "C:\1.xls"
AppExl.Quit

Set AppExl = Nothing


- и наш Excel продолжает висеть в памяти. Почему? да патамушто у нас два переменные указывают на Excel, это: AppExl и wrBook. AppExl мы приравняли Nothing, а вот wrBook продолжает удерживать в памяти наш Excel. Т.е. надо было написать в конце так:

Set AppExl = Nothing
Set wrBook = Nothing
4.9K
03 марта 2004 года
e_s
12 / / 24.02.2004
Это вообще Add-in для аулука

В том то и проблема, что Word с Excel выгружаются, а Outlook нет.

Я делаю =Nothing всем объектам, которые создавал.

Dim EvRegButton As Office.CommandBarButton
Dim oCommandBars As Office.CommandBars
Dim newCommandBar As Office.CommandBar

Public Sub InitHandler(ByRef app As Object)
Try
'Application
m_olApp = app

m_olExplorer = m_olApp.ActiveExplorer

CreateEvidenceButton()
AddHandler EvRegButton.Click, AddressOf EvRegButton_Click
'Adding handler for SelectionChange Event
AddHandler m_olExplorer.SelectionChange, AddressOf m_olExplorer_SelectionChange

'AddHandler m_olExplorer.Close, AddressOf m_olExplorer_Close
'Ctype is neccessary due to ambiguous names
AddHandler (CType(m_olExplorer, Outlook.ExplorerEvents_Event)).Close, AddressOf m_olExplorer_Close

Catch ex As System.Exception
End Try
End Sub

Private Sub m_olExplorer_Close()
UninitHandler()
End Sub

Public Sub UninitHandler()
Try
RemoveHandler EvRegButton.Click, AddressOf EvRegButton_Click
RemoveHandler m_olExplorer.SelectionChange, AddressOf m_olExplorer_SelectionChange
RemoveHandler (CType(m_olExplorer, Outlook.ExplorerEvents_Event)).Close, AddressOf m_olExplorer_Close
EvRegButton = Nothing
newCommandBar = Nothing
oCommandBars = Nothing
m_olExplorer = Nothing
m_olApp = Nothing

Catch ex As System.Exception
End Try
End Sub

После создания CommandBar и CommandBarButton перестал выгружаться.
Удаляю все Handlers, обнуляю все объекты. Всё равно не выгружается.
4.9K
03 марта 2004 года
e_s
12 / / 24.02.2004
короче прикол был в следующем.
Я создаю объект

m_olExplorer = m_olApp.ActiveExplorer
с ним работаю.

Затем, по простоте душевной написал строку
oCommandBars = m_olApp.ActiveExplorer.CommandBars

и вот здесь создался ещё один объект типа Explorer.
нужно было писать m_olApp.m_olExplorer.CommandBars,
тогда второй експлорер не создается
258
03 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Уточнил щас у Гетца и нашел что Outlook относится к таким объектам автоматизации, которые не выгружают себя после обнуления счетчика ссылок.

Чтобы выгрузить Outlook из памяти надо применить его метод - Quit (метод объекта Application). Попробуй, должно сработать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог