C# 在应用程序中打开许多不同类的最佳方法是什么?

C# 在应用程序中打开许多不同类的最佳方法是什么?,c#,winforms,C#,Winforms,下面是场景: 打开应用程序时,要求用户打开“项目” 项目内部有流程、类别、任务、文档和注释 还有一些,但让我们保持简单。上面的大多数项目都是绑定到网格或树视图的列表 它们每个都有一个单独的数据库表,并与数据库中的值相链接 因此,在用户打开项目后,我可以执行以下操作: 获取属于项目“A”的进程 获取属于每个进程的类别 获取属于每个类别的任务 获取属于项目“A”的文档 获取属于项目“A”的笔记 等等 问题是,如果用户关闭这个项目,我必须清除每个绑定控件和任何相关变量,然后准备打开另一个项目 所以我想

下面是场景:

打开应用程序时,要求用户打开“项目”

项目内部有流程、类别、任务、文档和注释

还有一些,但让我们保持简单。上面的大多数项目都是绑定到网格或树视图的列表

它们每个都有一个单独的数据库表,并与数据库中的值相链接

因此,在用户打开项目后,我可以执行以下操作:

  • 获取属于项目“A”的进程
  • 获取属于每个进程的类别
  • 获取属于每个类别的任务
  • 获取属于项目“A”的文档
  • 获取属于项目“A”的笔记 等等
  • 问题是,如果用户关闭这个项目,我必须清除每个绑定控件和任何相关变量,然后准备打开另一个项目

    所以我想要的是一些有效处理这种情况的建议


    我使用的是C#.Net,该应用程序是一个Windows窗体应用程序。

    好吧,无论您以何种方式对其进行切片,加载时完成的内存分配都必须在某个时候进行清理

    根据您访问数据的方式,您可能必须手动执行,或者.NET的垃圾收集器可能会为您处理(很可能)

    对于这种类型的应用程序(考虑到您编写的有限需求),我通常将其实现为MDI应用程序,这样您就可以同时打开多个项目。所有项目加载/处理代码都将通过子窗口运行,因此,每当子窗口关闭时,内存将自动清理


    即使您不/不能进行MDI,我强烈建议您遵循卸载时处置模型,而不是保持同一表单打开并使用新数据重新初始化它。由于数据和/或状态延迟,后一种模型很容易出现错误行为(这是程序员的错误,但在试图重现客户问题时很难甚至不可能跟踪)。我在WinForms中经常看到这种模式,当表单控件和业务逻辑开始变得复杂时,这种模式就不好看了。转储表单并重新开始。

    谢谢您的回答。我曾考虑过MDI解决方案,但该应用程序一次只需要打开一个项目,而且两个项目同时打开都没有多大用处。我决定将整个项目加载到一个自定义用户控件中,在项目关闭时可以转储该控件,在打开下一个项目时可以重新加载该控件。