unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ADODB, DB;type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOCommand1: TADOCommand;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var
  i:Integer;
begin
  for i:= 0 to 30000 do
  begin
    ADOCommand1.CommandText := Format(' update userdata set port = %d where RecordId = 5000',[i]);
    ADOCommand1.Execute;
  end;end;执行上面的代码能使sqlserver进程的内存暴涨到两三百兆,到底是sqlserver的原因还是ado控件的属性没有设置好??请高手赐教,感激不尽啊。up也有分。。

解决方案 »

  1.   

    高手啊!
    在测试SQLServer吗?
      

  2.   

    你相当于打开了表30001次,内存能不暴长么,因为来不及释放啊.建议你改为,把数据插入到一个临时表中,最后再一次update过去
      

  3.   

    for i:= 0 to 30000 do ??
      

  4.   

    要是先close;
    然后再处理会不会好些呢。
      

  5.   

    楼上的兄弟们:我给的代码只是测试ado控件连接sqlserver数据库时频繁执行sql语句到底会不会造成sqlserver进程内存暴涨??因为在我们项目的需求里必须频繁地执行sql语句
      

  6.   

    这是sqlserver的机制造成的,没有太大问题,:)
      

  7.   

    执行3万次SQL应该是增加CPU负担,可是表开3万次就不一样了,执行SQL怎么会占用内存那,肯定是打开的表占用了内存咯
      

  8.   

    sqlserver每打开一个连接就分配一定内存的,:)
      

  9.   

    SQL Server自会自动处理的!
      

  10.   

    1、判断是数据库或DELPHI的问题很容易,通过DELPHI连接ADO执行或在SQL中直接执行看看速度
       把以上代码转换成SQL代码在SQL中直接执行看看再说别的2、DELPHI和数据库是完全脱离的,所以先看看SQL有没有问题
      

  11.   

    ilons(轻轻的来,静静的接分,不带走什么,只留下几十个bytes):“你相当于打开了表30001次,内存能不暴长么,因为来不及释放啊.建议你改为,把数据插入到一个临时表中,最后再一次update过去”请教一下以下的疑问:
    1、为什么我操作的是一张表,还要去建临时表呢?到底有什么不同???
    2、难道sqlserver竟然会“笨的”在内存中保留30001表???为什么表来不及释放?如何释放表?
    3、而且我程序退出时把adoconnection都关闭了,sqlserver进程为什么还不能是否内存???
      

  12.   

    昨天王数据库里写了1w张图片,sqlserver,内存使用到了1.4g
    日死了~~不知道 楼上说的创建临时表怎么个创建法?
    create table temp from select.....么?
    那跟直接跟新有什么区别?
      

  13.   

    修改sqlserver的内存设置可以节约点。你的程序没问题。想通了为什么专业的数据库服务器都要用超牛的机器来当了吧,空间换时间的策略。
      

  14.   

    这是SQL Server的问题,我之前连续insert 10万条记录,消耗了2G的内存(不知道跟我带事务有没有关),当insert完成后,内存消耗立即回落。由于我机器内存没有那么大,只好把虚拟内存设置得很大。。
      

  15.   

    To: truedogface(^(o.o)^)这和你带事务有很大关系,所以当数据表很庞大(Rec>200-500万)的时候,如果要事务处理,那么你的电脑得比较N才好,如果往一个1000万条记录的表中添加10万条记录,而且如果你建立了主索引,如果这个时候你用了事务的话那真的会很难看,除非你的电脑是企业服务器级别(IBM E系列)的,否则慢慢等吧
      

  16.   

    那就这样
    1.把10万条记录先弄到临时表中,不要建立索引
    2.把1000万条记录的表的索引先取消 <<<---非必要步骤,有时候反而会弄巧成拙
    3、开启事务
    4.把10万条记录一次性添加
    5、事务完成或事务回滚会提高部分性能