【问题标题】:Managing Memory管理内存
【发布时间】:2012-03-21 06:27:17
【问题描述】:

您好,关于本网站的第一个问题,年轻的开发人员正在为 uni 开发一个项目,我决定用 C# 构建一个应用程序启动器,它的索引 exe 位于用户指定的目录中!我的问题是我正在使用键盘钩子来允许用户在需要时调用应用程序来聚焦,在应用程序二进制(exe)在内存中时查看任务管理器,每次我使用 Alt + 调用应用程序来聚焦X “Private Working Set”(PWS) 中的内存开始时大约为 40,000k(已经很大,所以这是值得关注的)但是一旦应用程序失去焦点,我就会再次调用它来关注PWS 的内存将增加到 50,000k,并且每次我重复此操作时都会增加 10,000k...

我知道我可能没有以正确的方式处理所有对象,我已经在此表单中直观地添加了表适配器,以便与我已经处理并设置为 null 的 SQL 数据库进行交互(不知道我是否' m 打算两者都做)并调用垃圾收集器.. 基本上我想回答的是找到内存泄漏的最佳工具是什么以及我如何将表单保留在内存中但又尽可能消耗最少的资源为什么每次使应用程序成为焦点时,我的应用程序基本上都会向 PWS 添加 10,000k,它基本上是每次都创建一个新的表单实例吗?我将添加一个互斥类来防止多个实例,但这会解决我的问题吗?

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

提前致谢

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

峰值内存:200,000k,对于应用程序的规模来说,这是非常高的,一旦 GC 完成其工作,它就会下降到 3,000k..

【问题讨论】:

  • 听起来你可能会遇到一些问题。一方面,您永远不需要手动调用垃圾收集器。这个问题有一些对你有用的信息:stackoverflow.com/questions/3573167/memory-management-in-net
  • 请尝试将 Alt + X 更改为另一个字符,例如 Alt + T,如果仍然有相同的结果,请告诉我们。
  • @MohammedShraim 已更改,但仍然有同样的问题,现在将检查您的链接。我知道我不必手动调用垃圾收集器,这只是我试图找到一种解决方法(不是一个好的解决方法)。
  • @NathanSmith 从这里无法判断您是否真的存在内存泄漏。基本上,CLR 可以根据需要使用尽可能多的内存。没有内存压力,为什么要花时间运行 gc? 最快的代码永远是你从未运行过的代码.
  • @NathanSmith 我没有你的项目在我面前运行,对吗?抓住许多免费的 c# 分析工具之一,看看它说了什么。没有任何其他信息是不可能的。

标签: c# sql winforms memory hook


【解决方案1】:

请记住,仅仅因为内存占用增加并不意味着您有内存泄漏(尽管您可能)。 C# 只会偶尔运行垃圾收集器,或者因为内存快用完而需要内存时。如果手动调用垃圾收集器使内存消失,则意味着您没有内存泄漏,而是垃圾收集器根本不费心清理内存。如果运行它没有帮助,则意味着它无法清理内存,您可能会遇到问题。

【讨论】:

  • 是的,当我不断地将应用程序从焦点中移开并移除以查看它在崩溃之前会达到多高(这取决于计算机的规格)时,它会启动应用程序无响应窗口。我想这表明 gc 没有清理内存,你认为键盘钩子可能与它有关吗?谢谢
  • @NathanSmith Servy 和我自己都没有 Ramond Chen 的物理调试能力。请在您运行我之前提到的探查器之后发布相关代码。然后我们会有一些可以帮助您的事情。
  • 没有任何代码访问权限真的很难说。我建议使用分析器来查看占用了这么多内存的内容。 Visual Studio 内置了一个(如果您有某些许可证版本)。这至少应该让您知道从哪里开始寻找。
  • @Servy 感谢 servy,我现在已经完成了最终的运行分析!
  • @Servy 看来我在非托管代码中有泄漏,据我所知,这可能是由于导入了构造不佳或用 c/c++ 编写的 dll 引起的?我正在使用 Telerik 的 WinForms、Twitterizer 和 Newtonsoft dll。这可能是问题的原因,尽管似乎包含泄漏的表单上没有使用 twitterizer dll。任何意见将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2016-10-12
  • 2012-06-14
  • 2012-08-12
相关资源
最近更新 更多