嗨,在这个网站上的第一个问题,年轻的开发人员正在为uni和我已经决定在C#中建立一个应用程序启动程序,其中索引的exe在用户指定的目录内!我的问题是,我使用键盘挂钩允许用户在需要时调用应用程序焦点,查看应用程序二进制(Exe)在内存中的任务管理器,每次我调用应用程序使用“私有工作集”(PWS)中的内存Alt +X聚焦时(已经很大了,因此这是值得关注的),但是一旦应用程序失去焦点并再次调用它,PWS的内存将上升到5万k,每次我重复此操作时都会增加10,000 k.
据我所知,我可能并没有在正确的庄园中处理所有对象,我已经将表适配器可视化地添加到此表单中,以便与我已处理并设置为null的SQL数据库进行交互(不知道我是否同时做了这两件事),并调用了垃圾收集器。基本上,我想要回答的是,找出内存泄漏的最好工具是什么?我如何将表单保存在内存中,但如何让它消耗尽可能少的资源?为什么我的应用程序每次将应用程序聚焦到PWS中时,基本上要向PWS添加10000 k,它是否基本上每次都创建一个表单的新实例?我将添加一个互斥类来防止多个实例,但这会解决我的问题吗?
我知道这可能是一个新手问题,但这是我第一次需要研究内存管理问题.
提前感谢
更新:嗨,以防有人在这个线程上绊倒,发现这有点相关,我发现我的问题并不完全需要修复,或者实际上包含了漏洞。在安装并启动应用程序之后,我将应用程序的内存使用量提高到峰值,并保持任务管理器( take )打开来监视它的内存,结果发现垃圾收集器最终完成了它的工作,尽管它可能需要2/3分钟。
峰值内存:200,000 K,对于应用程序的规模来说是难以置信的高,一旦GC完成了它的工作,它就下降到3000 K。
发布于 2012-03-02 18:58:09
请记住,仅仅因为内存占用正在增加并不意味着您有内存泄漏(尽管您可能)。C#只会偶尔运行垃圾收集器,或者当它需要内存时才会运行,因为它正在耗尽。如果手动调用垃圾收集器会使内存消失,那么这意味着您不会有内存泄漏,而是垃圾收集器根本不需要清除内存。如果运行它没有帮助,那么这意味着它不能清除内存,您可能有问题。
https://stackoverflow.com/questions/9538594
复制相似问题