代码如下:功能是循环检测U盘,如果发现非法U盘则删除U盘驱动。其中DllandStruct是结构或导入进来的DLL函数。
StcVar代表静态变量
关键是代码中并没有什么地方的内存我没有释放,为什么会出现内存不停的增加呢?谢谢
int nCount = 0;
while (true)
{
StcVar.hDevs = DllandStruct.SetupDiGetClassDevs(IntPtr.Zero, "USBSTOR", IntPtr.Zero, 0x2 | 0x4);
StcVar._SP_DEVINFO_DATA.reserved = IntPtr.Zero;
bool bEnum = DllandStruct.SetupDiEnumDeviceInfo(StcVar.hDevs, nCount, ref StcVar._SP_DEVINFO_DATA);
DllandStruct.CM_Get_Parent(out StcVar.ptrPrevious, StcVar._SP_DEVINFO_DATA.devInst, 0);
DllandStruct.CM_Get_Device_ID(StcVar.ptrPrevious, StcVar.ptrInstanceBuf, 256, 0);
//判断是否是合法设备
if (!StcVar.lstStrUsbPID.Contains(StcVar.InstanceID))
{
DllandStruct.SetupDiRemoveDevice(StcVar.hDevs, ref StcVar._SP_DEVINFO_DATA);
System.IO.File.WriteAllText(StcVar.strWindir + "RemoveDeviceID.tmp", StcVar.InstanceID);
}
nCount++;
if (nCount == 8)
{
nCount = 0;
Thread.Sleep(200);
}
}
------解决思路----------------------
一直 while (true) 的话 都耗掉所有内存的。while (true) 害人不浅呀。你可以在 while 中 Sleep 几分钟。
------解决思路----------------------
Thread.Sleep(200);
时间间隔小于了资源回收的速度,放大一点。
------解决思路----------------------
#1,#2正解
------解决思路----------------------
你先搞清楚不停增加增多久,要是过了1分钟还没停下来,说明你代码根本就有问题