internal void RefreshRecycleInfo()
{
            int newFileCount, newFolderCount;
            newFileCount = newFolderCount = 0;
            IntPtr enumIdListPtr;
            recycleBinFolder.EnumObjects(IntPtr.Zero, (int)(ShellApi.SHCONTF.SHCONTF_INCLUDEHIDDEN |
                ShellApi.SHCONTF.SHCONTF_NONFOLDERS), out enumIdListPtr);
            IEnumIDList iEnumIdList = (IEnumIDList)Marshal.GetObjectForIUnknown(enumIdListPtr);
            IntPtr pidlSub;
            int celtFetched;
            while (1 != iEnumIdList.Next(1, out pidlSub, out celtFetched))
            {
                ++newFileCount;
                Marshal.Release(pidlSub);
            }
            Marshal.Release(enumIdListPtr);
}以上这段代码是在一个timer中循环执行的,我把时间设置为50ms,可以发现内存占用以没M的速度上升。
现在发现是因为iEnumIdList和pidlSub没有正确的释放,请问这种com对象应该如何正确的释放。

解决方案 »

  1.   

    c#里面的内存释放----gc~~
    申请的内存什么时候释放由它决定
    c#程序在资源管理器中观察会发现,它的内存占用总是会一直彪升这不是内存泄漏~~没办法处理
      

  2.   

    没办法吧
    顶多加上IEnumIDList = null;  pidlSub = IntPtr.Zero;
      

  3.   

    我这个是com对象啊,应该不一样吧,这个可以达到200多M,而且没有减少过,如果我不管的话还会继续上升。
      

  4.   

    呵呵,你拖过一个texbox吗???
    texbox也是com刨根问底还是要去看.net 的GC
      

  5.   

    减少引用计数
    赋值为null
    立即垃圾回收GC.Collect();也没别的办法了,这不是泄漏