Вам нужно прочитать эту статью . У вас не хватит дескрипторов окон, и вам нужно реализовать и вызвать dispose, но, как говорится в статье, если вам нужно спросить об этом, вы делаете что-то не так.
Каждый элемент управления в Windows Forms получает уникальный дескриптор окна. Как указывается в статье, каждый процесс получает 10000 ручек. Дескрипторы освобождаются вызовом dispose, поэтому вам нужно убедиться, что вызов формы избавляется от дочерних элементов управления. Большинство контейнерных контролей позаботятся об этой части за вас, но дважды проверьте. Помните, что каждый элемент управления, текстовые поля все.
Я ударил это однажды. У нас были очень сложные формы, которые закрывались, когда пользователь делал с ними, но мы не распоряжались ими должным образом. Мы достигли предела ручки в спешке. Это также побудило нас переосмыслить объем информации, который пользователь может реально мысленно обработать за один раз, и мы упростили формы.
Это были наши автоматические приемочные испытания, которые поймали нас. Они прошли через формы быстрее, чем пользователь, и в спешке достигли предела ручки.
РЕДАКТИРОВАТЬ В ответ на изменение вопроса
Ну, если это не 3000 форм, с тобой все будет в порядке. Вы все равно должны прочитать ссылку, это полезно знать. Но 3000 экземпляров это совсем немного. Даже если у каждого из них по 1000 свойств, с вами все будет в порядке. В качестве простой проверки вы можете посмотреть приложение в диспетчере задач, чтобы убедиться, что оно в порядке.
В общем, вам нужно реализовать IDisposable
и вызывать его, если у ваших классов есть ссылки на такие вещи, как дескрипторы окон, файлы, соединения с базой данных и т. Д. Я не знаю, что делают ваши 3000 экземпляров, поэтому я не могу вам сказать, если вам нужно IDisposable
в этом случае.