Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查&;强制垃圾收集器收集以前创建的同一类的对象。。?_C#_Winforms - Fatal编程技术网

C# 如何检查&;强制垃圾收集器收集以前创建的同一类的对象。。?

C# 如何检查&;强制垃圾收集器收集以前创建的同一类的对象。。?,c#,winforms,C#,Winforms,我创建了C#winform应用程序,它是根据数据库规范动态加载控件。我使用的是拆分容器面板。我的应用程序将面板1中的两个窗口窗体加载为“MenuForm”,将面板2加载为“canvasForm”。当我在“MenuForm”菜单中单击时,“canvasForm”的对象被创建,并根据单击将其放置在面板2中。应用程序运行良好。但问题是,无论我如何点击菜单表单,画布表单对象的数量被创建,垃圾收集器未被收集,该项目进程的内存同时增加,我可以在windows的“任务管理器”中看到。如何解决此问题 示例:若我

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

示例:若我启动应用程序,进程内存将显示在windows任务管理器中,如17572K 当我点击菜单窗体中的时间数来选择菜单时。任务管理器显示18972K
如果我继续使用应用程序,可能会导致内存溢出

根据定义,垃圾收集器是不确定的。这意味着你不能直接控制它的行为,你也不打算这样做。。。这样做意味着.NET运行时不会自动为您管理内存。您可以进行一些特定的调用,如
GC.Collect()
,但不建议这样做。NET framework将根据需要为您释放内存

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

最重要的是,任务管理器中报告的内存不是应用程序使用的内存,而是通过.NET运行时的试探法为应用程序保留的内存


阅读此文了解更多信息:

任务管理器不是内存分析器。使用1%的可用内存不会很快导致“内存溢出”。如果您确信自己有问题,请使用real profiler。如何创建real profiler或向我推荐任何检查内存溢出的工具,无论是否是由内存溢出引起的。垃圾收集器的目的是给您无限内存的错觉。如果进程的内存使用量可以忽略不计,并且环境没有压力,那么从不收集的垃圾收集器是有效的,并且它的工作做得很好。您的意思是,在这种情况下不需要调用垃圾收集器。在任何情况下都不应该调用它。