2013-03-29 2 views
-1

У меня есть большое сложное приложение Windows Forms, написанное на VB.Net. Пользователи испытывают некоторые проблемы с памятью и используют JetTrackTracker Profiler, чтобы попытаться устранить некоторые из них.Утечка памяти в приложении VB.Net, объект, открытый Grid?

Есть еще что-то, что открыло некоторые из моих объектов. У меня есть объект «Клиент», который имеет Generic.ListInvoiceLineItem. Этот пункт в основном объект привязан к элементу управления сетки (ConponentOne FlexGrid), который имеет нагрузку только для чтения свойств для отображения данных, например:

Public Class InvoiceLineItem 
Private _customer as Customer 
Private _charge as Charge 

Sub New(Customer as Customer, Charge as Charge) 
    _customer = Customer 
    _charge = Charge 
End Sub 

Public ReadOnly Property Name as String 
    Return _customer.Name 
End Property 

Public ReadOnly Property ItemName as String 
    Return _charge.Name 
End Property 

Public ReadOnly Property Amount as Decimal 
    Return _charge.Amount 
End Property 
End Class 

и т.д.

Этот объект выглядит, как он не получает выпущенный из FlexGrid.

Flexgrid имеет дочернюю форму, показанную на основной форме. Когда дочерняя форма закрыта, Профайлер памяти показывает, что форма все еще ссылается. Когда я нажимаю «Самый короткий путь» в dotTrace, отображается путь ниже.

Shortest Path

Это, кажется, единственный объект Заказчика с корневым путем.

В этой форме между моим объектом или коллекцией нет настраиваемой обработки событий, и ничего не выбрано.

Что делать, чтобы устранить эту проблему дальше?

ответ

0

Я нашел проблему. Событие FormClosing обрабатывалось в другом месте и тестировалось на несохраненные данные, ссылка на форму удерживалась в этой функции и не была выпущена!