一个如此简单的ado测试程序居然有内存泄漏,请出手

一个如此简单的ado测试程序居然有内存泄漏,请大虾出手!
一天内存使用从8M上升到32M, ado已经更新到最新版本,vc win32 程序全部代码:


#include "stdafx.h"
#include "stdio.h"

int APIENTRY WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nCmdShow)
{
  // TODO: Place code here.

CoInitialize(NULL);

_ConnectionPtr pConn("ADODB.Connection");
pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"scd.mdb\"", "", "", 0); 

MessageBox(NULL, "Start testing", NULL, 0);

long bytes = 1;
long duration = 1;
char ip[16];
strcpy(ip, "1.1.1.1");

long sec = 1;
char path[256];
strcpy(path, "\\path1\\path2");


char id[25];
strcpy(id, "abcdefgh-123456789012345");

char d[20];

while(1){

SYSTEMTIME st;
GetLocalTime(&st);
sprintf(d, "%04d-%02d-%02d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

char sql[128];
sprintf(sql, "select * from bills where time='%s' and id='%s'", d, id);

try{
_RecordsetPtr rs("ADODB.Recordset");
rs->Open(sql, _variant_t((IDispatch *)pConn, true), adOpenForwardOnly, adLockOptimistic, adCmdText);

if(rs->adoEOF){
rs->AddNew();
rs->PutCollect("time", d);
rs->PutCollect("id", id);
}
rs->PutCollect("bytes", bytes);
rs->PutCollect("duration", duration);
rs->PutCollect("ip", ip);
rs->PutCollect("sec", sec);
rs->PutCollect("path", path);

rs->Update();
rs->Close();
}catch(...){};

Sleep(1000);

FILE *fp = fopen("stop.txt", "rb");
if(fp){
fclose(fp);
break;
}
}

pConn = NULL;

CoUninitialize();

MessageBox(NULL, "App stopped!", NULL, 0);
return 0;
}

------解决方案--------------------
pConn = NULL;
-->
pConn->Close();
pConn.Release();
------解决方案--------------------
从代码看没有问题。
pConn是智能指针,可以不需要调用Release()函数。
是否是其他地方的代码导致的。

------解决方案--------------------
探讨
rs是在try后面的{}块中申明的,所以在执行rs->Close()后,编译器就自动执行rs->Release了,已经释放了。用F11单步跟踪可以看到。

现在就是要解决rs被释放后,占用的内存依然增长的问题,否则这样的代码无法在服务器中使用。服务器是常年不开关机的。