Ограничение количества выигрышных форм в C#
Я пишу приложение WinForms, и пока оно содержит 37 форм. Это из-за потребностей моего проекта.
Мои вопросы:
- Есть ли ограничение на количество форм, созданных в C#?
- Влияет ли это на производительность приложения?
Спасибо за вашу помощь.
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, перейдите по следующим ссылкам:
Что касается удаления формы, то при закрытии формы она будет автоматически удалена, но если у вас есть переменная для этой формы в какой-либо другой форме, то желательно написать form1 = null;
в form1_disposed
событие