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

本文关键字:未使用 内存 程序 释放 | 更新日期: 2023-09-27 18:33:08

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

除了一个问题外,它运行良好。在计时器滴答事件中,我正在检查设备是否已连接。计时器时钟周期持续时间为 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()

但这并没有帮助。谁能在这方面提供帮助?

提前谢谢。

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

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

两种方法:

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

2)您需要处理要替换的图像。

方法1)更好