c# - 管理内存

标签 c# sql winforms memory hook

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

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

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

提前致谢

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

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

最佳答案

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

关于c# - 管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9538594/

相关文章:

php - MySQL 查询限制每条 "OR"结果

winforms - 如何以编程方式向表单添加控件?

c# - 以 xamarin 形式将 base64 字符串绑定(bind)到 ListView

c# - 为什么我在尝试调试 NUNIT 测试时获得此 "NUnit.Framework.SuccessException"?

mysql - 原子更新和备份 ON DUPLICATE KEY insert else - golang sql 语句

sql - MySQL 不支持子查询中的 limit 子句,我该怎么做?

c# - Winform 和用户控制 - C#

c# - 从类库中引用 System.Windows.Forms

c# - 将代码移至 viewModel 类绑定(bind)

c# - 如何获得参赛作品的版权属性