C# C语言中Win表单数量的限制#

C# C语言中Win表单数量的限制#,c#,winforms,performance,C#,Winforms,Performance,我正在编写WinForms应用程序,到目前为止,它包含37个表单。这是因为我的项目的需要 我的问题是: 在C#中创建的表单数量是否有限制 它对应用程序性能有影响吗 谢谢你的帮助 C#中的表单创建是否有限制 顺便说一句,.NET框架并没有强加这样的限制。显然,创建的表单越多并保存在内存中,在用完之前的内存就会越少。内存越少,性能越差 另一方面,如果您只在内存中保存当前表单,并让GC通过让其他表单的实例不在范围内来处理它们,那么就不会有这样的问题。在ram耗尽之前,表单的数量没有限制。但它会同时影响

我正在编写WinForms应用程序,到目前为止,它包含37个表单。这是因为我的项目的需要

我的问题是:

  • 在C#中创建的表单数量是否有限制
  • 它对应用程序性能有影响吗
  • 谢谢你的帮助

    C#中的表单创建是否有限制

    顺便说一句,.NET框架并没有强加这样的限制。显然,创建的表单越多并保存在内存中,在用完之前的内存就会越少。内存越少,性能越差


    另一方面,如果您只在内存中保存当前表单,并让GC通过让其他表单的实例不在范围内来处理它们,那么就不会有这样的问题。

    在ram耗尽之前,表单的数量没有限制。但它会同时影响系统和应用程序的性能。

    据我所知,项目中的其他模块或类可以创建您所需的数量,而不受任何限制


    问候。

    我有一个项目中有太多winforms(大约50个)。在2到3次调试构建和运行之后,我经常会遇到以下错误

    'E:\Repository\Project\JewelSoft\PresentationTier\obj\Release\PresentationTier.exe' --'没有足够的存储空间来完成此操作。 “代表人

    因此,请小心,并始终在需要时实现GC

    更新1: 尽管有像GC.Collect()这样的方法,但除非代码突然结束或线程切换,否则通常不需要实现它。处理关闭后不需要的表单以及避免对象的重复声明等都会有所帮助

    更新2: 要了解更多何时何地编写GC.Collect,请参考以下链接:


  • 关于form dispose,在form close方法中,它将自动被释放,但是如果您有一个其他形式的表单变量,那么建议编写
    form1=null
    表单1\u中处置
    事件

    因此,在这种情况下,我是否会遇到包括内存在内的问题@Real2000,在哪种情况下?如果你把所有的表格都保存在内存中?你认为实现这项工作的最佳方法是什么?使用TabControl而不是使用多表单更好吗?这是我创建的吗@Real2000,如果您使用一个包含许多控件和伪窗体的TabControl,这意味着所有控件和伪窗体都同时加载到内存中,这取决于卷的大小,可能不是很好。但另一方面,我们会丢失内存!您好,很抱歉我的英语不好,因为那时我实现了级别设计器,但如果您打算在运行时打开几个,那么我同意您的意见,当有更多的可用内存时,OutOfMemory例外中会出现错误。关于您的意思是,如果我们不一次打开多个表单,那么对于大量表单(即多达50个),您的意思是,我们不会有内存问题吗?你能帮助我如何使用GC吗?因为知道.NET自动调节GC这一事实,我还没有使用过GC!谢谢大家!@Real2000:虽然有像GC.Collect()这样的方法,但除非代码突然结束或线程切换,否则通常不需要实现它。例如,在关闭后处理不需要的表单,避免重复声明对象,这些都会有帮助。我不知道GC.Collect会提供什么,因为如果系统内存不足,则会运行等效的GC.Collect。如果没有释放足够的字节,手动GC.collect调用也不会。我应该在哪里编写GC.collect()?!我应该在form closed event中添加form.Dispose?@Real2000:请参阅更新2我同意。然而,使用这么多的表单可能会在VS中引发bug症状,你在一两个表单中是看不到的。@TheBlastOne:那么我们需要更多表单的解决方案是什么呢?!
    Error 1   Unexpected error writing metadata to file