读书人

关于数据库和BCB6联用的系统内存占用过

发布时间: 2013-01-01 14:04:19 作者: rapoo

关于数据库和BCB6联用的系统内存占用过大问题(占了1G+而且还不断上涨)
我做了一个利用BCB6向SQL Server 2000实时存数据记录的系统,大概每5秒存一个,但是有三组数据要存到三个表中去,系统现在可以正常运行。

我对SQL Server 2000做了内存上线的设定,设定为100M,在任务管理器中显示他实际占用了大概120M左右(稳定在这个范围内),另外我为存数据所用到的数据库的属性中,数据文件里分配了1G的空间,文件自动增长设为50%,事务日志设置的也比较大。

我的BCB6的执行文件在任务管理器中一般占40M-400M之间到,有时候可以释放回十几M。

在与数据库连接时为了防止空间不足,还做了connection断开再连接的处理.

我这个系统是延续前人的,原来没有数据库部分,且原系统可能会存在一些内存不释放的问题,但是原系统并没有像现在这样一天就要达到1G以上。

在windows任务管理器中,观察它所占的总内存一天之后大概会达到1.5G左右,强制关闭BCB执行文件后可以释放800多M的内存,可是BCB在进程中显示的只有40-200多M(最多的时候也就400M,释放的比显示的多很多),而且我发现BCB文件内存长的时候,内存总使用跟着涨,但是BCB释放的时候内存总使用量却不释放,这是怎么回事啊,各位大侠帮帮忙,先谢谢了,要是我哪地方没表述清楚或者需要我说明其他细节,请指明!谢谢
[解决办法]
可以试着删除对象:)
但这招在BDE里不管用。它有专有有语句来进行清空。DBX里也是不管用,网上找找清空连接池吧。应该能找到:)
[解决办法]

引用:
引用:

同感,当初是用Delphi 6+Sql Server 2000 sp4 做的系统也是这样,内存占用量不断增长
解决:

1、如果是服务程序,半夜里定时关闭、重启一次,时间间隔稍微长点;
if(Time="01:00:00")
Application->Terminate();
程序加入到计划任务里,每天06:00:00再启动;
2、sel……


sql server的存储过程我也好久没写了,大概写个oracle的吧,一样的道理
如果用insert时,写个存储过程

Create or Replace Procedure User.AddNewUser (
p_UserId Account.UserId%type,
p_Name Account.Name%type,
p_ErrCode out Number ,
P_ErrText out varchar2 ) is
Begin
Insert into Account(UserId,Name) Values(P_UserId,P_Name);
Commit;

p_ErrCode := 0;
P_ErrText :='成功导入账户信息。';
Exception
When others then
P_ErrCode := -ABS(sqlcode);
P_ErrText :='导入账户信息发生错误('
[解决办法]
to_char(p_ErrCode )
[解决办法]
')';
rollback;
End AddNewUser;
/

然后CB里使用StoredProcedure组件直接调用改存储过程AddNewUser即可,
把UserId,Name按照参数传递就成
不要直接在CB里使用"insert into ....."
AdoQuery->ExecSQL();

这样的语句了。

读书人网 >C++ Builder

热点推荐