【问题标题】:Limitation in Number of Win Forms in C#C# 中 Win 表单数量的限制
【发布时间】:2011-11-07 08:37:19
【问题描述】:

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

我的问题是:

  1. C# 中创建的表单数量是否有限制?
  2. 它对应用程序性能有影响吗?

感谢您的帮助。

【问题讨论】:

    标签: c# winforms performance


    【解决方案1】:

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

    Error 1   Unexpected error writing metadata to file
    

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

    因此,请务必小心并始终在需要的地方实施 GC。

    更新 1: 尽管有 GC.Collect() 之类的方法,但您通常不需要实现它,除非您遇到代码突然结束或切换线程的情况。诸如处理关闭后不需要的表单并避免重复声明对象之类的事情会有所帮助。

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

    1. GC.Collect()

    2. When to call GC.Collect

    3. When is it acceptable to call GC.Collect?

    关于表单处理,在表单关闭方法上它会自动被处理,但是如果你有一个其他表单的变量,那么建议在form1_disposed事件中写form1 = null;

    【讨论】:

    • 你能帮我如何使用 GC 吗?因为知道 .NET 自动调节 GC 这个事实,所以我没有使用过 GC!谢谢!
    • @Real2000:虽然有像 GC.Collect() 这样的方法,但你通常不需要实现它,除非你遇到代码突然结束或切换线程的情况。诸如处理关闭后不需要的表单并避免重复声明对象之类的事情会有所帮助
    • 我看不到 GC.Collect 会提供什么,因为如果系统内存不足,则会运行等价物。如果这不能释放足够的字节,手动 GC.collect 调用也不会。
    • 我应该在哪里写 GC.Collect() ?!我应该在表单关闭事件中添加 form.Dispose ?
    • @Real2000: 请参考更新2
    【解决方案2】:

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

    问候。

    【讨论】:

    • 但另一方面我们会失忆!
    • 你好,对不起我的英语不好,因为那时我意识到了关卡设计师,但是如果你打算在运行时打开几个,那么我同意你,当会有更多的空闲内存时你有一个错误在 OutOfMemory 异常中。问候
    • 你的意思是,如果我们一次不打开很多表单,我们就不会出现内存问题?
    【解决方案3】:

    在内存用完之前,表单的数量没有限制。但它会影响系统和应用程序的性能。

    【讨论】:

    • 我同意。但是,使用这么多表单可能会触发 VS 中的错误症状,而您使用一两个表单是永远不会看到的。
    • @TheBlastOne:那么我们需要更多表单的解决方案是什么?!
    【解决方案4】:

    在 C# 中创建表单有限制吗?

    AFAIK .NET 框架没有这样的限制。显然,您创建并保存在内存中的表单越多,您将拥有的内存就越少,直到您用完为止。您拥有的内存越少可能会导致性能下降。

    另一方面,如果您只在内存中保留当前表单,而让 GC 通过让其他实例超出范围来处理其他表单,则不会出现此类问题。

    【讨论】:

    • 那么在这种情况下,我会不会有包括内存在内的问题...?
    • @Real2000,在什么情况下?如果您将所有表格都保存在内存中?
    • 作为您的想法,实施这项工作的最佳方式是什么?使用 TabControl 比使用多表单更好吗?
    • 这是我创建的 37 个!?
    • @Real2000,如果您使用带有许多控件和 伪表单 的 TabControl,这意味着它们都同时加载到内存中,具体取决于音量可能不是很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多