当前位置:主页>销售管理软件> 列表

sqlservr.exe内存利用不断增长。源代码如下... 找家电销售管理软件

销售管理软件版1楼: 程序执行环境:
WindowsXP SP2,Windows2000Pro
SqlServer2000 没有打补丁

在定时器里每秒执行查询数据表。
为什么sqlservr.exe不断增长,每次大约增长40k。
为什么会出现这种情况,怎样解决?

我把定时器关了,就不出现这种情况了。
我想,应该还有这种情况,只是执行一次变化不大而已。

数据集也关了,是代码的问题吗,还是SqlServer本身查询一次就会使用内存并不释放?

//判断是否到了重启时间
function TFrmMain.IsRebootTime(HHMMSS: string): boolean;
begin
with data1.adocyc do
begin
close;
sql.Clear;
sql.Add(Format(cnSqlReboot, [HHMMSS]));
open;
if RecordCount = 1 then
begin
result := true;
end
else
begin
result := false;
end;
close;
end;
end;

//定时器不断查询
procedure TFrmMain.Timer1Timer(Sender: TObject);
begin
//是否重启时间.
if IsRebootTime(FormatDateTime(''HH:MM:SS'', now)) then
begin
ReBoot() //重启
end;
end;

2楼: 在SQL Server属性中有内存控制设置 如家电销售管理软件

3楼: 是吗,我看看,这个问题我也遇到了。

4楼: 可以设定的。

5楼: 右击SqlServer服务器-->属性-->Memory可以设定。
但是本质上问题不在这里吧?

6楼: 刚才打了SP3还是这个问题.

SqlServer 每次运行一个查询,就会将数据放在Cache内存中,查询完毕也并不释放cache内存.为了以后查询提高速度.
我在定时器里执行了同样的sql语句,sqlserver应该不会再分配查询记录的内存吧.

为什么sqlservr.exe内存一直增长呢?

销售管理软件版7楼: 内存增长不是什么BUG,微软就是这样设计的.

8楼: 根据你的描述。
一般是程序的问题。

把每秒查询去掉。或者把查询结果放到缓存,不要一直查询数据库。

如果1秒钟没查完,另一个查询又来了,则会使sqlserver的性能大大较低。

9楼: 没办法。只有去掉定时器轮寻了。