Использование памяти карты Google в форме VB.Net - PullRequest
2 голосов
/ 16 июля 2011

Я использую карту Google внутри приложения vb.net.Проблема в том, что он постоянно занимает место в памяти, когда я ищу карту в веб-браузере, который находится в форме Windows.Хотя я закрываю форму, она не исчезла из памяти.Объем памяти только увеличивается.Это уходит, когда я закрываю форму MDI.Какое решение для этого?Как мне решить проблему с памятью?

-> Отредактировано: один из членов команды нашел решение.Это сработало довольно хорошо.Просто вызывайте функцию всякий раз, когда вы хотите это сделать.Я использовал его на закрытии формы.

<DllImport("psapi.dll")> _
    Public Function EmptyWorkingSet(ByVal hProcess As IntPtr) As Boolean
    End Function

    <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Public Function GetCurrentProcess() As IntPtr
    End Function

    Public Sub FreeMemory()
        EmptyWorkingSet(GetCurrentProcess())
    End Sub

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Зацените мой ответ на этот вопрос. Я считаю, что вам лучше всего провести профилирование.

Я запустил пробную версию профилировщика памяти ANTS для приложения, над которым я работал, и обнаруженная проблема описана в этом кратком обзоре о том, как использовать инструмент (особенно подробности вокругцифры 10 - 15).

По сути, я подписывался на некоторые события в форме, но потом не отписывался от них, когда форма закрывалась.Это означало, что там была ссылка на форму, и она (вместе со всеми ее элементами управления и членами) никогда не собиралась.

Возможно, у вас похожая ситуация, но лучше всего смотреть на код впрофайлер.Это не должно быть этим (это только тот, который я использовал).Это, безусловно, поможет вам определить причину вашей проблемы.

2 голосов
/ 16 июля 2011

Это из либеральной сборки мусора в .NET.Если вы действительно беспокоитесь о памяти, попробуйте это.

Сначала убедитесь, что объекты, которые вы хотите удалить, были удалены.Если это форма Windows, она должна быть автоматической.

Позвонить System.GC.Collect().Вы должны увидеть уменьшение использования памяти.

0 голосов
/ 22 июля 2011

В качестве обходного пути вы можете использовать родителя MDI и помещать свои карты в дочерние формы MDI, каждый раз открывая новую (или периодически закрывая неиспользуемые)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...