Vb.net WPF диспетчер делегат помощи утечки памяти - PullRequest
0 голосов
/ 04 декабря 2010

Я использую следующий код для проверки проблемы, которую пытаюсь решить.

Class MainWindow
    Dim bw As BackgroundWorker = New BackgroundWorker()

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        AddHandler bw.DoWork, AddressOf bw_DoWork
        AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

        bw.RunWorkerAsync()
    End Sub

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        For i As Integer = 0 To 250000
            Dim d As New test_delegate(AddressOf test)
            Dispatcher.Invoke(d, " SUPER SUPER SUPERSPERSUPERSUPERvSUPERSUPERSUPERSUPERv LONG Test")
        Next
    End Sub

    Private Delegate Sub test_delegate(ByVal txt As String)
    Private Sub test(ByVal txt As String)
        txtTest.Text = txt
    End Sub
End Class

приложение пропускает память медленно, но заметно.

как мне очистить (или утилизировать) каждого делегата, которого я создаю? поскольку нет д.доставки?

спасибо!

1 Ответ

0 голосов
/ 06 декабря 2010

Я понял, что если вы объявляете новый делегат в глобальной области и вызываете его по мере необходимости, это устраняет эту проблему:

Class MainWindow
    Dim bw As BackgroundWorker = New BackgroundWorker()

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        AddHandler bw.DoWork, AddressOf bw_DoWork
        AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

        bw.RunWorkerAsync()
    End Sub

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        For i As Integer = 0 To 250000
            Dispatcher.Invoke(d, " SUPER SUPER SUPERSPERSUPERSUPERvSUPERSUPERSUPERSUPERv LONG Test")
        Next
    End Sub

    Dim d As New test_delegate(AddressOf test)
    Private Delegate Sub test_delegate(ByVal txt As String)
    Private Sub test(ByVal txt As String)
        txtTest.Text = txt
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...