我现在有一数据库连接池,用的是TADOConnection连接,原来连接的是sql。现在使用oracle10数据库,我就下来最新的oracle10最新的客户端,使用的oracle的驱动,设置好ConnectionString,但是程序测试下来,有内存泄露!使用软件检测还测不出来哪里有泄漏,但是更换sql的ConnectionString,就没问题。
折腾了好长时间,没测出来。后来我偶然使用了微软的oracle驱动,当然还要装oracle的客户端,但是必须设置个配置文件。测试后居然内存不涨了!!!
这我就奇怪了,什么都没改,微软的驱动不也是调用配置文件里面的链接,还是使用oracle的链接,没啥就没泄露了???这是怎么一会事情???我使用单独的测试程序exe链接oracle,直接模拟select结果,使用oracle的驱动,不使用微软的oracle驱动,但也不涨。我就更加郁闷了向项目经理说明了情况,结果项目经理要求必须使用oracle的驱动,这个用户不必配置那个配置文件(我估计客户不会配置的,会引起很多不要的麻烦)!我的头已经N个大了,大哥大姐门给个解决方法了,不行的话,我真要跳楼了:(
折腾了好长时间,没测出来。后来我偶然使用了微软的oracle驱动,当然还要装oracle的客户端,但是必须设置个配置文件。测试后居然内存不涨了!!!
这我就奇怪了,什么都没改,微软的驱动不也是调用配置文件里面的链接,还是使用oracle的链接,没啥就没泄露了???这是怎么一会事情???我使用单独的测试程序exe链接oracle,直接模拟select结果,使用oracle的驱动,不使用微软的oracle驱动,但也不涨。我就更加郁闷了向项目经理说明了情况,结果项目经理要求必须使用oracle的驱动,这个用户不必配置那个配置文件(我估计客户不会配置的,会引起很多不要的麻烦)!我的头已经N个大了,大哥大姐门给个解决方法了,不行的话,我真要跳楼了:(
但是要是链接串修改成微软那个oracle的,就不涨,sql的也不长。
connectionString:='Provider=OraOLEDB.Oracle.1;User ID=ECM;Password=ecm;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.17.31)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)));Persist Security Info=False';
这时就内存泄露如果,我改用这个连接串,就不泄露。这个事微软的oracle,但是需要在客户端程序配置个配置文件,配置文件的内容,就是上面连接的内容,
connectionString:=Provider=MSDAORA.1;Password=test;User ID=test;Data Source=orcl;Persist Security Info=True我的问题是,要用第一种连接方式,但是要解决内存泄露的问题。这两种连接不同的就是连接字符串不同,别的代码我都没动
使用oracle的驱动,请问就一定有内存泄露?我就是想知道泄露在什么地方,是否可以解决,不能用别的方式
我的ADOQuery获取字段信息的时候,都是使用ID= VarToStr(ADOQuery.FieldsValue['字段名']);
结果我改成:
ID:=trim(ADOQuery.FieldByName('字段名').AsString);
就可以了!但是上面的情况,我用微软的那个oracle的驱动也没问题的,有清楚为什么的兄弟姐妹们,回复下。大家共同提高