3

我正在开发按功能分为几组的大型应用程序。由于每个功能大部分都是独立的(它们都使用相同的数据库,但不同功能之间没有直接交互),我使用用户定义的控件并将它们视为单独的“应用程序”。应用程序的工作方式是这样的:

  • “根”应用程序仅包含主菜单和 2 个面板。主菜单用于选择功能组。
  • 选择组后(在应用程序启动时自动选择第一组),该组的功能(由按钮表示)显示在第一个面板中。
  • 用户选择他/她想要的功能(通过单击相应的按钮),并且包含“表单”的用户控件显示在第二个面板中。显示所有用户控件的代码如下所示:

        panel2.Controls.Clear();
        UserControl1 uc1 = new UserControl1();
        uc1.Location = new Point(0, 0);
        panel2.Controls.Add(uc1);
        label6.Text = "User control 1";
    

因此,当用户选择其中一项功能时,应用程序会清除现有控件,并显示选定的控件。该应用程序运行良好(到目前为止我实现的部分),所以这是我的问题 - 这种方法如何管理计算机资源,主要是内存。具体来说,如果用户使用一个功能,然后切换到另一个功能,.NET 的服务是否会释放前一个功能使用的内存(我认为垃圾收集器负责该功能)以及我使用的 SQL 连接与数据库通信,被关闭?另外,还有其他一些我应该注意的问题吗?正如我所说,这些功能可以正常工作,但我距离整个应用程序的全面测试还很远(我只在创建每个功能时单独测试它,并且仅在我创建它的计算机上,所以我不能将其视为适当的测试)。因此,我担心如果应用程序在较长时间内不断使用,应用程序的性能可能会下降。我正在使用 VS 2010 (C#) 和 SQL Server 2005 来创建这个应用程序。如果您有任何建议,请写下来。带着这个问题,我试图防止由于资源管理不善而导致应用程序进入测试和实施阶段后的重大重建。谢谢。如果您有任何建议,请写下来。带着这个问题,我试图防止由于资源管理不善而导致应用程序进入测试和实施阶段后的重大重建。谢谢。如果您有任何建议,请写下来。带着这个问题,我试图防止由于资源管理不善而导致应用程序进入测试和实施阶段后的重大重建。谢谢。

4

2 回答 2

1

垃圾收集器负责释放属于未在任何地方引用的对象的内存。如果您的 Windows 窗体的窗体一次显示许多控件,它们都以某种方式被当时的窗体引用,因此 GC 不会在此处清理任何内容,您需要注意不要在这些控件中加载太多对象。此外,如果Dispose在调用panel2.Controls.Clean().

于 2012-10-30T09:56:34.937 回答
0

我也在创建这样的应用程序。在管理控件时,我遇到了很多困难(请参阅我在 stackoverflow 上的问题)

我的期望是应用程序使用的内存会变得很多。您应该关闭不再需要的控件以防止这种情况发生。还有与 SQL 的连接,我建议您手动打开/关闭它们,这样您就可以确保以后没有冲突。

于 2012-10-30T09:48:50.373 回答