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