首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于数据库和BCB6联用的系统内存占用过大有关问题(占了1G+而且还不断下涨)

2013-01-01 
关于数据库和BCB6联用的系统内存占用过大问题(占了1G+而且还不断上涨)我做了一个利用BCB6向SQL Server 200

关于数据库和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();

这样的语句了。

热点排行