-1

我创建了 C# winform 应用程序,它是从数据库规范动态加载控件。我正在使用拆分容器面板。我的应用程序在 panel1 中将两个窗口窗体加载为“MenuForm”,将 panel2 加载为“canvasForm”。当我单击“menuForm's”菜单中的对象时根据点击创建“canvasForm”并将其放置在 panel2 中。应用程序运行良好。但问题是,然而我点击了菜单表单,画布表单对象的编号被创建,垃圾收集器没有被收集,并且该项目进程的内存同时增加,我可以在 windows 的“任务管理器”中看到。如何解决这个问题? .

示例:如果我启动应用程序,当我单击菜单表单中的时间数以选择菜单时,Windows 任务管理器中的进程内存显示为 17,572 K。如果我连续使用应用程序,任务管理器显示 18,972 K,这可能会导致内存溢出。

4

1 回答 1

2

根据定义,垃圾收集器是不确定的。这意味着您不能直接控制其行为,也不打算这样做……这样做意味着 .NET 运行时不会自动为您管理内存。您可以拨打一些特定的电话,GC.Collect()建议这样做。.NET 框架将根据需要为您释放内存。

如果您遇到内存使用问题,则需要调查并修复代码中的问题。如果您有很多对象到达第 2 代,则内存将膨胀,因为收集时间更长。您的目标是要么不创建新对象,要么创建在 Gen 0 或 1 中收集的短期对象(此处 0 优于 1)。评估您的代码并改进以减少您的问题。

最重要的是,这就是它变得棘手的地方,任务管理器中报告的内存不是您的应用程序使用的内存,而是.NET运行时的启发式为您的应用程序保留的内存......

阅读本文以获取更多信息:.NET 垃圾收集

于 2013-07-19T12:40:59.143 回答