SHGetFileInfo调用N次后罢工,救命!该怎么处理

SHGetFileInfo调用N次后罢工,救命!
如上:代码如下,看了内存会增长很快,真心找不到问题所在,感觉是SHGetFileInfo是它调用很多次后,把内存弄得很高,结果后面图标就不见了!什么情况啊。
C/C++ code
while(hfile!= INVALID_HANDLE_VALUE )
        {
            strTemp = fileDate.cFileName;    
            if(!SHGetFileInfo(start+_T("\\")+strTemp,0,&shFi,sizeof(SHFILEINFO),SHGFI_ICON)&& strTemp != "." && strTemp != "..")
            {
                if(SHGetFileInfo(start+_T("\\")+strTemp,0,&shFi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_PIDL))
                    goto line;
                break;
            }
            line:
            if((fileDate.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strTemp != "." && strTemp != ".."){
            
                //posFile=imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));            
                posFile=imageList.Add(shFi.hIcon);
                root=treeCtrl.InsertItem(strTemp,posFile,posFile,TVI_ROOT,root);
                DestroyIcon(shFi.hIcon);
                    //MessageBox(_T("dgd"));
            }
            if(!(fileDate.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strTemp != "." && strTemp != ".."){                
                    pos=imageList.Add(shFi.hIcon);
                    DestroyIcon(shFi.hIcon);
                    item=treeCtrl.InsertItem(strTemp,pos,pos,TVI_ROOT,item);                    
                    
                }
            bool isNextFile = FindNextFile(hfile,&fileDate);//判断该目录下是否还有文件
            if(isNextFile == 0)
            {
                break;
            }
        }


------解决方案--------------------
参考下面文章,试试直接用iIcon,不用hIcon
http://www.cnblogs.com/jianu/archive/2011/05/12/2044885.html
------解决方案--------------------
觉得你这个遍历逻辑上有些问题?一般的先得到文件路径,先过滤.和..,SHGetFileInfo得到文件图标,Add到CImageList中,然后DestroyIcon()删除,然后再去判断是否是目录还是文件,如果是目录的话,再递归
------解决方案--------------------
1.imageList有必要循环Add么?放全局吧。加载一次就可以了。
反正图标一直要显示的。

2.
MSDN:
Do not use this function to destroy a shared icon. A shared icon is valid as long as the module from which it was loaded remains in memory. The following functions obtain a shared icon.

不要删除一个共享的图标,
只要这个图标任然在内存中使用,就被定义为一个共享图标

 CreateIconFromResourceEx CreateIconIndirect and CopyIcon. 
才用DestroyIcon


------解决方案--------------------
图标没有了。。单步看看有没有添加图标。。。
------解决方案--------------------
提出几个问题:
1. 你的文件查找与判断的循环不太恰当。通常都是这么写的:
C/C++ code
HANDLE hFindFile;
WIN32_FIND_DATA w32fd;
hFindFile = FindFirstFile(szWildcard, &w32fd);
if (hFindFile != INVALID_HANDLE_VALUE) {
    do {
        if (w32fd.cFileName == _T(".") || w32fd.cFileName != _T("..")) {
            continue;
        }
        if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
            //
        } else {
            //
        }
    } while (FindNextFile(hFindFile, &w32fd));
    FindClose(hFindFile);
}