当前位置: 代码迷 >> C# >> 下面代码造成内存不停的增加,求有关问题出在哪里
  详细解决方案

下面代码造成内存不停的增加,求有关问题出在哪里

热度:208   发布时间:2016-04-28 08:41:37.0
下面代码造成内存不停的增加,求问题出在哪里?

代码如下:功能是循环检测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分钟还没停下来,说明你代码根本就有问题
  相关解决方案