【发布时间】:2013-11-16 17:52:15
【问题描述】:
我必须制作一个监控 USB 端口的程序,当插入 USB 设备(手柄、闪存驱动器、鼠标、ecc...)时,我会得到一个唯一标识符(设备 ID 或其他东西会很好)。
起初,我尝试使用 C# 使用 system.management 类并每秒查询 cim_logicaldevice 类以插入新设备。
某些设备返回了更多带有 DeviceID 的行,但这不是问题。问题是程序(在任务管理器中)占用的内存不断增长。
这是源代码:
http://pastebin.com/dQv3cMQC
有没有办法避免内存使用量的增长?
我必须用 C++ 或 C# 编写这个程序,而且它必须尽可能高效(因为它必须永远打开)。
【问题讨论】:
-
只是一些笔记。注意1:任务管理器在跟踪内存方面不是很准确。注意 2:考虑将一次性对象包含在 using(DisposableObject obj = new DisposableObject()){ } 中,而不是直接调用 Dispose 注意 3:仅出于调试目的调用 GC,完整的 GC 收集通过 3 步 GC.Collect( ); GC.WaitForPendingFinalizer(); GC.Collect();
-
使用控制台跟踪使用的内存量在我看来内存相当稳定
-
如果您的目标是最大效率(内存方面),请不要使用 c#
-
我也用过using(),不过好像是System.Management搜索器的get方法有问题。
-
我已经知道任务管理器不是很准确,但我认为使用的内存增长是真实的。我也知道 C# 不是最适合我的语言,所以我找到了 libusbx 库,我正在用 C 编写程序。