Delphi 7 DBExpress FireBird2.0 / FireBird 2.1. 有内存泄漏

20 views
Skip to first unread message

电脑玩家

unread,
Oct 7, 2009, 4:28:53 AM10/7/09
to 挨踢技术
测试方法:

建立一个程序,有一个 DataModule,内放一个 DBExpress的SQLConnection,设置它为连接到某个 FireBird 数
据库,采用FBClient.dll库。

程序里写一个循环,创建这个DataModule 的实例,然后释放这个对象实例,在任务管理器观察程序占用内存的情况。循环100次,程序占用内存没
有增加;

如果创建DataModule的实例后打开SQLConnection连接,然后才释放这个DataModule,则连续100次后会看到内存占用明显
增加;

如果这个SQLConnection连接的是SQL Server,则观察不到内存增加;如果用一个 ADOConnection去连接
SQLServer也观察不到内存增加。

结论:DBExpress对FireBird的连接,释放的时候有内存泄漏。

如果在服务器端的程序里使用 DBExpress + FireBird,则:
1. 如果是CGI程序,则不怕内存泄漏,反正每次调用结束,程序的进程已经彻底释放;
2. 如果是独立运行常驻内存的程序,则应该用连接池,这样也避免了不断地创建和释放,也就避免了释放导致的内存泄漏;
3. 如果是 ISAPI,则......俺也不知道该怎么办,需要做点实验才知道。

如果把 DBExpress + FireBird 放在 COM+ 里面,也需要注意这个问题。当然 COM+ 也可以做连接池。

Reply all
Reply to author
Forward
0 new messages