如何通过C#中的程序释放未使用的占用内存

时间:2014-12-03 15:33:02

标签: c# memory garbage-collection

我开发了一个程序来读取具有指定产品ID和供应商ID(pid和vid)的写HID设备。这是library

除了一个问题外,它的工作正常。在计时器刻度事件中,我正在检查设备是否已连接。定时器滴答持续时间为1000毫秒。代码如下:

if (_connectionTester.IsDeviceConnected())
{
    connectionStatusPictureBox.Image = Globals.Resources.GreenCircleImage;
    HIDGlobals.Connected = true;
}
else
{
    connectionStatusPictureBox.Image = Globals.Resources.RedCircleImage;
    HIDGlobals.Connected = false;
}

IsDeviceConnected函数是:

 public bool IsDeviceConnected()
 {
     return _usb.getDeviceList()
         .Any(d => d.Contains(HIDGlobals.VID + "&" + HIDGlobals.PID));
 }

问题在于时间的流逝会增加内存使用量。当我第一次启动软件时,内存使用量为33.6 MB(在任务管理器内存列中)。 10分钟后,它变为38.7 MB。 5-6小时后变为GB。

这是一个可以运行8-9个小时的应用程序。有没有办法释放记忆?我尝试过垃圾收集器GC.Collect()

但它没有帮助。在这方面可以有人帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

每次调用Globals.Resources.GreenCircleImage都会创建新图像。您必须处理您不再使用的每个图像,否则您将有内存泄漏。

两种方法:

1)您可以在应用程序启动时创建图像实例。并在申请完成后销毁它们。

2)你需要处理你正在替换的图像。

方法1)更好