none
ADO连接数据库在Window2003下内存不释放,不断增加 RRS feed

  • 问题

  • 使用VC++的MFC编写的应用程序,使用ADO方式连接数据库,SQLServer,Access,

    该应用程序在Window 2000, Windows XP, Windows Vista, Windows 7下没有任务问题,
    但是该程序在Windows Server 2003下内存不断的增加,从ADO的Open Connection到SELECT查询,插入,所有操作后所有产生的缓存全部都不释放
    Windows Server 2003使用的是MDAC 2.8 SP2

    鉴于以上情况怀疑可能是MDAC 2.8 SP2与Windows Server 2003的问题?
    有大牛们知道么?

    (补充:在多台Window Server 2003上试用,不是个别问题)
    • 已编辑 zewu 2009年12月7日 2:50 补充说明
    2009年12月7日 2:28

答案

  • 可能ADO的内存管理本身就有问题,对它不熟悉的同志们,估计会被吓一大跳吧

    谢谢蒋版主参与,辛苦了

    • 已标记为答案 zewu 2009年12月10日 7:48
    2009年12月10日 7:48

全部回复

  • 安装Windows Server 2003 Service Pack 2看看。记得SP2有修正一个MDAC内存泄漏问题的。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年12月7日 4:53
    版主
  • 产生错误的Windows Server 2003的Dependency数据(有两台电脑,其中一台刚半个月前连续打的SP1,和SP2补丁,另一台直接安装的集成SP2补丁的光盘)
    (前一部分为同一DLL但是版本号,文件大小不同,后一部分分别为有问题和没有问题的电脑上DLL依赖关系上多出来的DLL,其它相同部分都已经省略)
    Module            |  TimeStamp      |   Size |Attuributes| Base     |       FileVer      |      ProductVer|ImageVer|LinkerVer |OSVer |SubsystemVer

    GDI32.DLL       10/23/08 7:45p     284,672    A     0x77BD0000    5.2.3790.4396     5.2.3790.4396     5.2         7.10         5.2         4.10
    KERNEL32.DLL  03/22/09 1:07a  1,205,248    A     0x7C800000    5.2.3790.4480     5.2.3790.4480     5.2         7.10         5.2         4.0
    MSVCIRT.DLL   03/03/07 5:50p      56,832    A     0x08020000     7.0.3790.4034     5.2.3790.4034     5.2         7.10         5.2         4.10
    MSVCRT.DLL    03/03/07 5:50p     349,184    A     0x77B70000    7.0.3790.4034     6.1.8638.4034     5.2         7.10         5.2         4.0
    ODBC32.DLL    02/17/07 2:43p     245,760    A     0x4B750000    3.526.3959.0       3.526.3959.0       5.2         7.10         5.2         4.0
    OLEAUT32.DLL 12/13/07 3:45p     553,984    A     0x775F0000     5.2.3790.4202     5.2.3790.4202     5.2         5.10         5.2         4.10
    SECUR32.DLL  02/04/09 7:41p       65,536    A     0x76EB0000     5.2.3790.4455     5.2.3790.4455     5.2         7.10         5.2         4.0
    SHELL32.DLL   06/18/08 4:08a   8,219,136    A     0x7CA10000    6.0.3790.4315     6.0.3790.4315     5.2         5.10         5.2         4.10
    WININET.DLL   07/04/09 8:37a     915,456    A     0x40270000     8.0.6001.18806   8.0.6001.18806    6.0         8.0          6.0         5.1

    IERTUTIL.DLL   07/04/09 8:37a  1,985,536    A     0x40910000     8.0.6001.18806    8.0.6001.18806   6.0         8.0         6.0         5.1
    NORMALIZ.DLL 01/07/09 6:20p      23,552    A     0x00400000     6.0.5441.0           6.0.5441.0           6.0         8.0         6.0         5.0
    URLMON.DLL    07/04/09 8:37a  1,208,832    A     0x439B0000     8.0.6001.18806    8.0.6001.18806   6.0         8.0         6.0         5.1

    未产生错误的Windows Server 2003的Dependency数据(直接安装的集成SP2补丁的光盘)
    Module            |  TimeStamp      |   Size |Attuributes| Base     |       FileVer      |      ProductVer|ImageVer|LinkerVer |OSVer |SubsystemVer

    GDI32.DLL       02/17/07 6:42a    282,624     A     0x77BD0000     5.2.3790.3959     5.2.3790.3959    5.2         7.10         5.2         4.10
    KERNEL32.DLL 02/17/07 6:57a  1,204,224     A     0x7C800000     5.2.3790.3959     5.2.3790.3959    5.2         7.10         5.2         4.0
    MSVCIRT.DLL  03/27/03 8:00p      51,200     A     0x603B0000     7.0.3790.0           5.2.3790.0         5.2          7.10         5.2         4.10
    MSVCRT.DLL   02/17/07 6:43a     348,672     A     0x77B70000    7.0.3790.3959      6.1.8638.3959     5.2         7.10         5.2         4.0
    ODBC32.DLL   02/17/07 6:43a     245,760     A     0x4B750000    3.526.3959.0        3.526.3959.0      5.2         7.10         5.2         4.0
    OLEAUT32.DLL 02/17/07 6:43a    552,960     A     0x775F0000     5.2.3790.3959      5.2.3790.3959     5.2         7.10         5.2         4.10
    SECUR32.DLL  02/17/07 6:43a      65,024     A     0x76EB0000     5.2.3790.3959      5.2.3790.3959     5.2         7.10         5.2         4.0
    SHELL32.DLL   02/17/07 6:56a  8,218,112     A     0x7CA10000    6.0.3790.3959      6.0.3790.3959     5.2         7.10         5.2         4.10
    WININET.DLL   02/17/07 6:54a    655,872     A     0x779E0000     6.0.3790.3959      6.0.3790.3959     5.2         7.10         5.2         4.0

    CRYPT32.DLL 02/17/07 6:59a      586,752     A     0x760A0000     5.131.3790.3959  5.131.3790.3959  5.2         7.10         5.2         4.0
    MSASN1.DLL 02/17/07 6:43a         57,344     A     0x76080000     5.2.3790.3959      5.2.3790.3959     5.2         7.10         5.2         4.0

    2009年12月7日 7:51
  • 使用Component Checker Version2.0检查与MDAC 2.8 SP2 on Windows Server 2003 SP2作比较分析得到的差别是

    没有内存释放问题的2003系统仅有一项,为注册表值:
    HKEY_LOCAL_MACHINE\SOFTWARE\classes\MSDASC      Registry Expected : data=Microsoft Data Link;
    该处在简体中文版系统中显示为:Microsoft 数据连接,帮检测为差别,无实质问题

    在有内存释放问题的2003系统中除上一项差别外还一项,在C:\Windows\Sytem32下,为文件差别:
    msxml3.dll     正常的版本号为8.80.1185.0
    而有问题的两台电脑该文件版本号均为 8.100.1048.0

    难道此文件msxml3.dll就导致了内存不能释放的问题?与ADO的数据操作有关系么?疑问之.
    2009年12月10日 3:33
  • 完全修正好,使用Component Checker Version2.0检测各MDAC元件完全一致,但是还是存在着运行状态内存不能释放的差异,
    个人认为不一定再于MDAC有关,只是苦于搞不清楚从应用层到数据库实现层中的层级关系,无法进一步挖掘
    2009年12月10日 7:18
  • 可能ADO的内存管理本身就有问题,对它不熟悉的同志们,估计会被吓一大跳吧

    谢谢蒋版主参与,辛苦了

    • 已标记为答案 zewu 2009年12月10日 7:48
    2009年12月10日 7:48