管理记忆

时间:2012-03-02 18:36:49

标签: c# sql winforms memory hook

首先在这个网站上提出问题,年轻的开发人员正在为uni项目工作,我决定在C#中构建一个Application Launcher,它在用户指定的目录中索引exe!我的问题是我正在使用Keyboard Hook来允许用户在需要时调用应用程序进行聚焦,当应用程序二进制文件(exe)在内存中时查看任务管理器,每当我使用Alt +调用应用程序进行聚焦时X “私人工作集”(PWS)中的内存从大约40,000k开始(已经很大,所以这引起关注)但是一旦应用程序失去焦点并且我再次关注它PWS的记忆力将增加到50,000k,并且每次重复这个就会增加10,000k ......

据我所知,我可能没有将所有对象都放置在正确的庄园中,我已经在视觉上为这个表单添加了表适配器,用于与我已经处理并设置为null的SQL数据库的交互(不知道我是不是m意味着做两件事)并称之为垃圾收集器..基本上我想回答的是找到内存泄漏的最佳工具是什么?如何在内存中保留一个表单但是它尽可能消耗尽可能少的资源为什么每次应用程序聚焦时我的应用程序基本上都会向PWS添加10,000k,它基本上每次都会创建一个新的表单实例吗?我将添加一个互斥类来防止多个实例,但这会解决我的问题吗?

我知道这可能是一个新手问题,但这是我第一次需要内存管理问题来研究......

提前致谢

更新:大家好,以防万一有人偶然发现这个帖子并发现这有点相关我发现我的问题并不完全需要修复或实际上包含泄漏。在安装我的应用程序并启动它之后,我将应用程序设置为其峰值内存使用量并保持任务管理器打开以监视其内存,结果是垃圾收集器最终确实可以完成它的工作,尽管可能需要2/3分钟。

峰值内存:200,000k,一旦GC完成其工作,它的应用规模非常高,它下降到3,000k ..

1 个答案:

答案 0 :(得分:-1)

请记住,仅仅因为内存占用率上升并不意味着您有内存泄漏(尽管您可能)。 C#只会偶尔运行垃圾收集器,或者因为它耗尽而需要内存。如果手动调用垃圾收集器会使内存消失,那么这意味着您没有内存泄漏,而垃圾收集器根本就没有打算清理内存。如果运行它没有帮助,那么这意味着它无法清理内存并且您可能遇到问题。