我的程序如下:VC2003+ADO+SQL SERVER 2000
        CoInitialize(NULL);   //初始化COM库
_ConnectionPtr m_connection;
HRESULT hr;
 hr=m_connection.CreateInstance(_uuidof(Connection));//创建与数据源的连接
CStringm_strConnection="Provider=SQLOLEDB;driver=SQLServer;Server=127.0.0.1;
         Database=DUTHMIDB;uid=CC;pwd=123456;";
try

m_connection->Open(_bstr_t(m_strConnection.GetBuffer(0)),_T(""),_T(""),-1);
}
        。。
         for(...)
        {
              ....
              m_connection->Execute((_bstr_t)bstr,&RecordsAffected,adCmdText);//bstr是INSERT INTO VALUES(。语句。
        }         if (m_connection!=NULL)
{
  m_connection->Close();
}
         ::CoUninitialize(); 这段代码10分钟执行一次,出现的问题是每次sqlserver使用的内存逐渐增大,因为我这个程序要长时间运行,所以这是个很严重的问题,请各位执教!!!

解决方案 »

  1.   

    在::CoUninitialize(); 之间添加代码:
    m_connection=NULL;
      

  2.   

    注:是SQLSERVER 的内存增大 而不是我的程序内存增大
      

  3.   

    晕..那这个就没有办法了,你正常操作,断开数据库连接的话,SQL SERVER出现的这种现象应当是它自己本身的问题.~
      

  4.   

    if (m_connection!=NULL) 

      m_connection->Close(); 

    m_connection=NULL;
    ::CoUninitialize(); 
    这个加上不好用
    我看了内存,每10分钟时间到了以后,内存就会增大 然后不减小;
    我用的SQLSERVER 2000 在网上下的   唉!但愿不是这个问题 
      

  5.   

    设置 min server memory 和 max server memory   这个不知到管不管用  尝试中
      

  6.   

    在代码:m_connection->Close(); 
    后面加上两句:m_connection->Release();
                m_connection = NULL: 
      

  7.   

    m_connection->Release(); 加上后会出现异常
      

  8.   

    try m_connection.Release(); 
    not m_connection->Release(); 
      

  9.   


    m_connection 是智能接口指针,所以Release不能用->,而必须用.
    m_connection->Release();   // 错的
    m_connection.Release();    // 对的
    另外SQL Server内存变大也可能是正常的,因为SQL服务启动时,没有客户端访问数据库时,服务没有加载数据库的全部信息。
    当你访问某个数据库的某个表时,就对载入对应的信息,包括表数据和索引等;
    表中的数据也会缓存在内存中,并不是每次都从磁盘读取。所以在访问初期内存占用变大是正常的,并不一定会持续增加。
    如果是持续增加,说明你的数据库结构设计不合理。
      

  10.   

    智能指针重载了=操作符..m_connection=NULL;等同于m_connection.Release();的效果基础上再把指针赋空值,所以只要m_connection=NULL;就行了.
      

  11.   

    最近,为了能在数据库服务器中运行其他应用程序,在保持数据库操作系统版本不变的前提下对数据库服务器进行了软、硬件上的升级。在软件上,将操作系统从Windows 2000升级到Windows Server 2003;在硬件上,将服务器中的内存由原来的512MB增加到1GB(1024MB)。 
      在升级后的开始几个星期之内,服务器在使用中表现良好。但是不久后就发现,在服务器上同时运行的其他应用程序却出现了异常,不时地报出内存分配不足的警告。经过几次跟踪后发现,原来是SQL Server吞去了大部分内存所致。被SQL Server占用的内存由升级前的不到400MB一下子增加到现在的900MB,并且有不断增长的趋势。 
      通过查找原因才知道这是SQL Server 缓冲池的预期行为。默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。 
      为了使运行在服务器上的应用程序都能达到比较满意的效果,同时也为了能给其他应用程序分配足够的内存,需要采取措施限制SQL Server 的内存使用量。我们可以通过设置SQL Server 数据库引擎使用的内存的上下限来达到此目的。其具体步骤是: 
      1.打开企业管理器,展开服务器组。 
      2.单击该服务器,点击鼠标右键,单击属性菜单。 
      3.在弹出的对话框中单击内存选项卡。 
      内存设置方法有两种: 
      1.设置min server memory和max server memory 在一个范围段内。 
      比如,我们将它设置成最小0MB,最大255MB。这种方法在为一台服务器中运行多个应用程序分配内存时非常有用。 
      2.设置 min server memory 和 max server memory 为同一数值。 
      比如,可以将它最大和最小值都设置成255MB。这样的设置方法与窗口中的另一个选项"使用固定的内存大小" 相一致。 
      虽然内存最小值和最大值设置是高级选项,但在设置完毕之后,最好还是先将SQL Server服务停止后再重新运行,以便SQL Server能更好地对内存进行合理安排。