Я надеюсь, что кто-то может быть в состоянии помочь!
У нас есть довольно большое приложение VB.Net MDI, которое было преобразовано из VB6. При первом запуске без открытых форм MDIChild используется около 35 000 КБ. По мере того, как все больше и больше форм открывается (но не закрывается), использование памяти (согласно диспетчеру задач) увеличивается примерно до 4000 КБ на форму. (Я знаю, что TM показывает только выделенную память для приложения, а не фактическую используемую память.)
Проблема заключается в том, что когда выделенная память достигает определенной точки, которая зависит от доступной памяти на целевой машине, никакие формы не могут быть открыты до тех пор, пока одна или несколько открытых форм не будут закрыты. «Предел» количества форм, которые можно открыть, по-видимому, зависит от доступной памяти машины.
Например: - На виртуальной машине всего с 512 МБ для всей машины, кажется, около 7-8 форм, а выделенная память составляет около 80 000 КБ, когда это происходит. - На нашей машине с терминальным сервером, которая имеет 3 ГБ и также работает с различными другими приложениями, она останавливается на уровне около 20+ форм и выделении памяти около 100 000–105 000 КБ.
Я попытался использовать perfmon, чтобы увидеть, есть ли утечка, и это указывает на постоянное использование.
Однако, даже если я закрою формы, выделенная память уменьшится только примерно на 3000 КБ для первой закрытой формы, а затем на 100 КБ для каждой формы, закрытой после. Если я затем добавлю еще несколько форм, память увеличится, и если я затем закрою те же самые -3000K, -100K, снова произойдет сокращение памяти.
Кто-нибудь сталкивался с этим раньше? Может ли кто-нибудь помочь, так как это похоже на шоу-стоппер! Я с нетерпением жду ваших ответов.
Между прочим, исходная версия VB6 не имеет этой проблемы, а также вернет распределение памяти к тому, с чего оно началось, если вы закроете каждую форму, а не распределение постепенно увеличивается, потому что приложение выпускает меньше, чем оно выделено.
EDIT: Мне только что удалось получить ту же ошибку в dev. Похоже, что в UserControl выбрасывается исключение WIN32Exception. Ошибка "Ошибка создания дескриптора окна".
Спасибо и с уважением, Дуэйн.