对数据库插入时,内存泄漏了。

CAICALG 2007-05-14 02:57:24
不知道大家遇到没遇到这种情况,用ADO对数据库操作时,内存会疯长,,我主要用的时这几个指针,_CommandPtr,_RecordsetPtr,_ParameterPtr,
我对数据库做的主要操作是插入。现象是每插入100条,内存大概就要涨2M,这谁受的了啊?

我单步走了下,好像_CommandPtr这个指针会自动release,我实在是找不到泄漏的地方了,

麻烦各位看看,是怎么回事?
...全文
430 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdleek 2007-05-18
  • 打赏
  • 举报
回复
内存是否线性增长,如果插入1000条,你的程序占用的内存是否多20M
CAICALG 2007-05-18
  • 打赏
  • 举报
回复
VC里没有报泄漏,但是实际上内存泄漏的很厉害,每插入100条,就泄漏2M,
我始终怀疑是我用的智能指针把内存泄漏了,而且如果把_CommandPtr cp的参数(就是hResult = cp->Parameters->Append(pp);)屏蔽掉的话,泄漏的幅度会小很多,大概每插入100条,泄漏200K

晕了。。
wy2001wy 2007-05-18
  • 打赏
  • 举报
回复
估计是栈中的内在释放的不及时吧,不见得是内在泄露,VC里报泄露了?
llzhe 2007-05-18
  • 打赏
  • 举报
回复
关注。。。
遇到同样的问题
jjiaming 2007-05-18
  • 打赏
  • 举报
回复
是不是用了AllocSysString函數,而沒有釋放,我以前也遇到此類問題
zdleek 2007-05-18
  • 打赏
  • 举报
回复
反而在降?有一点起落那是正常的,有操作就会有变化
CAICALG 2007-05-18
  • 打赏
  • 举报
回复
嗯,不过内存不涨,反而在降,这个总觉得有点问题啊。
心里不踏实。。
zdleek 2007-05-18
  • 打赏
  • 举报
回复
vc泄漏检测机制不是百分百精确
你可以查查有关检测泄露的api和基本原理
就会知道有时候vc会误报内存泄露,但是事实上没有泄露
CAICALG 2007-05-18
  • 打赏
  • 举报
回复
内存不涨,反而在降,这个有点诡异了。。
CAICALG 2007-05-18
  • 打赏
  • 举报
回复
嗯,wy2001wy(小鱼儿) 说的很对,

不过我现在把safearray,destory之后,内存到是不涨了,不过VC却在报泄漏了。
wy2001wy 2007-05-18
  • 打赏
  • 举报
回复
safearray肯定是需要destory的,这种不报的一般就只能是释放不及时了,可能你上次的还没来得及释放就又分配下一次的了。
比如说你先把数据放到一个链表中了,然后向数据库中插入一批,之后这个链表并没有删除或析构,你又搞出一链表然后放数,然后插入数据所里,就有可能会涨得厉害了。
CAICALG 2007-05-18
  • 打赏
  • 举报
回复
我之前是safearray,creat之后,没有destroy,现在已经destroy了,内存也不涨了,不过在VC里确报泄漏了,
Detected memory leaks!
Dumping objects ->
{1555} normal block at 0x0003FA80, 364 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1549} normal block at 0x0003F860, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 02 00 00 00
{1546} normal block at 0x0003F720, 252 bytes long.
Data: < > 98 EF 03 00 04 00 00 00 00 00 00 00 01 00 00 00
{1542} normal block at 0x0003F6C8, 27 bytes long.
Data: < 2| > D8 9C 32 7C 0A 00 00 00 0A 00 00 00 02 00 00 00
{1535} normal block at 0x0003E188, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 02 00 00 00
{1528} normal block at 0x0003EED0, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 02 00 00 00
{1520} normal block at 0x0003EFE0, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 02 00 00 00
{1512} normal block at 0x0003F670, 26 bytes long.
Data: < 2| > D8 9C 32 7C 09 00 00 00 09 00 00 00 02 00 00 00
{1504} normal block at 0x0003F5B8, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1496} normal block at 0x0003EF88, 23 bytes long.
Data: < 2| > D8 9C 32 7C 06 00 00 00 06 00 00 00 02 00 00 00
{1493} normal block at 0x0003F200, 28 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1485} normal block at 0x0003DED0, 23 bytes long.
Data: < 2| > D8 9C 32 7C 06 00 00 00 06 00 00 00 01 00 00 00
{1484} normal block at 0x0003F118, 72 bytes long.
Data: < K > C8 EF 4B 00 E0 DE 03 00 CD CD CD CD 20 F7 03 00
{1468} normal block at 0x0003F410, 364 bytes long.
Data: < > 08 ED 03 00 00 00 00 00 00 00 00 00 01 00 00 00
{1465} normal block at 0x0003F268, 364 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1461} normal block at 0x0003F0C0, 26 bytes long.
Data: < 2| > D8 9C 32 7C 09 00 00 00 09 00 00 00 02 00 00 00
{1455} normal block at 0x0003F068, 26 bytes long.
Data: < 2| > D8 9C 32 7C 09 00 00 00 09 00 00 00 02 00 00 00
{1448} normal block at 0x0003EC98, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1441} normal block at 0x0003EE78, 26 bytes long.
Data: < 2| > D8 9C 32 7C 09 00 00 00 09 00 00 00 02 00 00 00
{1434} normal block at 0x0003EE20, 27 bytes long.
Data: < 2| > D8 9C 32 7C 0A 00 00 00 0A 00 00 00 02 00 00 00
{1426} normal block at 0x0003ED50, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1418} normal block at 0x0003EAF8, 21 bytes long.
Data: < 2| > D8 9C 32 7C 04 00 00 00 04 00 00 00 02 00 00 00
{1410} normal block at 0x0003EDC8, 26 bytes long.
Data: < 2| > D8 9C 32 7C 09 00 00 00 09 00 00 00 02 00 00 00
{1402} normal block at 0x0003ECF8, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1399} normal block at 0x0003EAA0, 28 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1391} normal block at 0x0003E2F0, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 01 00 00 00
{1390} normal block at 0x0003EA18, 72 bytes long.
Data: < K > A8 EF 4B 00 00 E3 03 00 CD CD CD CD 10 F4 03 00
{1388} normal block at 0x0003E8E0, 252 bytes long.
Data: <P > 50 E2 03 00 00 00 00 00 00 00 00 00 01 00 00 00
{1385} normal block at 0x0003EB60, 252 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1381} normal block at 0x0003E3A0, 22 bytes long.
Data: < 2| > D8 9C 32 7C 05 00 00 00 05 00 00 00 02 00 00 00
{1374} normal block at 0x0003C800, 33 bytes long.
Data: < 2| > D8 9C 32 7C 10 00 00 00 10 00 00 00 02 00 00 00
{1366} normal block at 0x0003E298, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1358} normal block at 0x0003E1E8, 21 bytes long.
Data: < 2| > D8 9C 32 7C 04 00 00 00 04 00 00 00 02 00 00 00
{1350} normal block at 0x0003E348, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 02 00 00 00
{1342} normal block at 0x0003E240, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 02 00 00 00
{1339} normal block at 0x0003DF30, 28 bytes long.
Data: < > 98 83 03 00 02 00 00 00 00 00 00 00 00 00 00 00
{1331} normal block at 0x0003DD48, 25 bytes long.
Data: < 2| > D8 9C 32 7C 08 00 00 00 08 00 00 00 01 00 00 00
{1330} normal block at 0x0003DE48, 72 bytes long.
Data: < K X > 88 EF 4B 00 58 DD 03 00 CD CD CD CD E0 E8 03 00
{303} normal block at 0x00038710, 23 bytes long.
Data: < 2| > D8 9C 32 7C 06 00 00 00 06 00 00 00 06 00 00 00
{226} normal block at 0x00038388, 27 bytes long.
Data: < 2| > D8 9C 32 7C 0A 00 00 00 0A 00 00 00 06 00 00 00
Object dump complete.


大家看看,是怎么回事啊?
CAICALG 2007-05-17
  • 打赏
  • 举报
回复
ding
CAICALG 2007-05-15
  • 打赏
  • 举报
回复
自己顶
CAICALG 2007-05-14
  • 打赏
  • 举报
回复
呵呵,这个我还是看了,SQL的内存肯定是要涨的,不过程序涨的也很厉害。
lcqwrd521 2007-05-14
  • 打赏
  • 举报
回复
数据库调用后不是及时地释放内存的。需要看一下是程序的内存涨了,还是数据库的内存涨了。
ky310 2007-05-14
  • 打赏
  • 举报
回复
关注
CAICALG 2007-05-14
  • 打赏
  • 举报
回复
是啊,我用的那三个指针都是智能指针,应该是可以自己释放的,但是,现在泄漏的很厉害,
我也糊涂了,

等高手。。。。
也多谢各位的关注
慕容一一 2007-05-14
  • 打赏
  • 举报
回复
顶一下,关注,是智能指针,应该可以自己释放
wangk 2007-05-14
  • 打赏
  • 举报
回复
有可能是adCmdText没有释放?
_CommandPtr是智能指针,应该能自己释放。
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧