关于数据库和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里也是不管用,网上找找清空连接池吧。应该能找到:)
[解决办法]
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();
这样的语句了。