Ограничение количества выигрышных форм в C#

Я пишу приложение WinForms, и пока оно содержит 37 форм. Это из-за потребностей моего проекта.

Мои вопросы:

  1. Есть ли ограничение на количество форм, созданных в C#?
  2. Влияет ли это на производительность приложения?

Спасибо за вашу помощь.

4 ответа

Решение

Есть ли ограничение в создании форм в C#?

AFAIK нет такого ограничения, налагаемого.NET Framework. Очевидно, что чем больше форм вы создаете и храните в памяти, тем меньше памяти у вас будет, пока вы не исчерпаете их. И чем меньше у вас памяти, тем ниже производительность.

С другой стороны, если вы сохраняете в памяти только текущую форму и оставляете GC заботиться о других, оставляя их экземпляры вне области видимости, таких проблем не будет.

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

Не то, что я знаю, или другие модули или классы в проекте могут создавать столько, сколько вам нужно, без каких-либо ограничений.

С уважением.

У меня был проект со слишком большим количеством winforms (Приблизительно 50). После 2 или 3 отладочных сборок и запусков я использовал следующую ошибку.

Error 1   Unexpected error writing metadata to file

'E: \ Repository \ Project \ JewelSoft \ PresentationTier \ obj \ Release \ PresentationTier.exe' - 'Недостаточно памяти для выполнения этой операции. ' PresentationTier

Поэтому будьте осторожны и всегда применяйте GC там, где это необходимо.

Обновление 1: Хотя существуют методы, такие как GC.Collect(), вам часто не требуется его реализовывать, если только у вас нет случаев, когда ваш код заканчивается внезапно или переключает потоки. Такие вещи, как удаление форм, которые не требуются после закрытия и избегание повторных объявлений объекта, будут полезны.

Обновление 2: Чтобы узнать больше, когда нужно написать GC.Collect, перейдите по следующим ссылкам:

  1. GC.Collect ()

  2. Когда звонить в GC.Collect

  3. Когда можно позвонить в GC.Collect?

Что касается удаления формы, то при закрытии формы она будет автоматически удалена, но если у вас есть переменная для этой формы в какой-либо другой форме, то желательно написать form1 = null; в form1_disposed событие

Другие вопросы по тегам