内存不释放??? 本帖最后由 afeideweixiao 于 2012-04-24 11:49:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 new的东西要关闭!这是写程序最基本的素质。lx继续 我不知道你指哪里的new,即便是,问题也不在这。为了测试,我这个程序与oracle是放在两台机子上跑的,这个测试程序内存没什么问题,就直说oracle那台机子内存狂飙。 while (1) { Statement * stmt = conn->createStatement(szInsert ); stmt->executeUpdate(); conn->terminateStatement(stmt); conn->commit(); Sleep(10); //10毫秒 }感觉没有退出循环的语句啊,将上述代码改成只执行一次,即去掉循环,看看还飙升不?如果不是,那就应该是循环的问题。 这个问题跟OS刷新逻辑页到磁盘物理页的时间长短以及你大量更新数据,导致oracle产生大量的逻辑脏页有关。跟应用程序关系还不大。如果你sleep长一些时间,比如10秒,就应该不会看到内存暴涨。因为当逻辑页刷入到磁盘后,相关的内存会被释放掉。如果LZ是处理大量数据的插入的问题,则建议采用数组插入的方式。OCI下没有玩过,PROC*C下是有的。在数组插入的方式下,Oracle采用块拷贝的方式,日志会少很多,因此逻辑脏页也会少很多。还有一种解决方案是,将数据转换成sqlldr可以识别的格式,然后用sqlldr将数据装入。这些方法都会比单条记录插入的方式要快很多。 这段程序只是测试,我项目中插入数据肯定没有这么频繁,中间间隔基本都有大好几秒。只是,我发觉,没插入几个数据,Oracle内存就增加一些,然后,继续插入,继续增加。,根本没看见oracle内存有释放。最后,内存满了,机子挂了。 继续关注啊!我现在也是遇到这样的情况:运行环境:WINDOWS 2003,数据库:Cache;有两台服务器,一台是分析数据的服务器(A服务器),一台是提供数据的服务器(B服务器);A服务器连接到B服务器取数据,在A服务器上连接B服务器的进程内存会爆长,没有进行取数这个动作时,这个进程不释放内存,只有将A服务器重启,才能释放这个内存!!!代码以及这种运行方式在其他地方是没问题的! 是多表连接查询效率高还是多次单表查询效率高啊 oracle查询 求百分比 求sql语句 如何使用web版em,连接到指定数据库(sid)? 我如何连另一台服务器数据库 这样的SQL语句怎么写? 从oracle导出数据到sql server的问题? 请问,oracle导出整个数据库应该怎么做 SELECT INTO问题:相同表结构复制出错-----00905: missing keyword (我是新手) ORACLE 11g 如何通过仅有备份集还原数据库 关于游标 求一个plsql中的英数字check方法
我不知道你指哪里的new,即便是,问题也不在这。
为了测试,我这个程序与oracle是放在两台机子上跑的,这个测试程序内存没什么问题,就直说oracle那台机子内存狂飙。
while (1)
{
Statement * stmt = conn->createStatement(szInsert );
stmt->executeUpdate();
conn->terminateStatement(stmt);
conn->commit();
Sleep(10); //10毫秒
}感觉没有退出循环的语句啊,将上述代码改成只执行一次,即去掉循环,看看还飙升不?
如果不是,那就应该是循环的问题。
这段程序只是测试,我项目中插入数据肯定没有这么频繁,中间间隔基本都有大好几秒。
只是,我发觉,没插入几个数据,Oracle内存就增加一些,然后,继续插入,继续增加。,根本没看见oracle内存有释放。最后,内存满了,机子挂了。