在我一个程序中的个别窗口打开时会有3秒钟的延迟,我在父窗口中的Button的OnClient中和子窗口的OnShow中写了事件,子窗口中用的是Cxgrid表表的列是根据数据库查询结果动态创建的,创建事件也写在子窗口的OnShow事件中,但当点击Button按钮打开子窗口时会有几秒钟的延时或停顿。用起来感觉很不好。
   我看了一下进程,打开窗口时内存增加并不多,但CPU的使用率会从百分之一二一下升到百分之四十左右,待窗口完全显示出来后,CPU使用率又降下来了,  内存泄漏有一点,但我觉得不是问题的关键
不知各位大哥有何高见?

解决方案 »

  1.   

    写在create中,或者另写一个初始化界面的函数或过程。
    因为程序最小化再恢复时会再次执行onshow中的代码。至于窗体打开慢,要看代码的……无代码,无真相~~
      

  2.   

    那请问有没有等同于onshow事件的地方可以写啊,或者在窗体onshow后再执行事件也可以,但不知写在什么地方,还望指教!
      

  3.   


    可以考虑用TTimer,只运行一次。
      

  4.   

    我的那个窗口有二三下个CxDbTextEdit和6个RzPageControl和四个CxGrid,一个窗口里这么多控件算多吗?不知有没有影响?
      

  5.   

    我的那个窗口有二三十个CxDbTextEdit和6个RzPageControl和四个CxGrid,一个窗口里这么多控件算多吗?不知有没有影响?
    [更正一下上面的]
      

  6.   

    CxGrid加载列和行太慢了,功能倒是强大。问题应该在这里。你可以考虑不要写在show里。
    用一个timer,等show现来后,再运行timer中的事件。。有些比较耗时的读数据的操作,我一般都这么做。
    不然窗体会有些迟钝。
      

  7.   

    还有我RzPageControl每个RzTabSheet中都有数个CxTextEdit,在RzTabSheet互相切换时会出现窗口延时,第二个窗口已经显示出来,但还能看到第一个窗口瞬间消失的图像影子。不知是什么原因
      

  8.   

    不想写create,你可以这样:
    function formcreate: Integer;
    begin
      wirh TForm1.create(nil) do begin
        try
          InitWndFace;  //这个过程里面写你的那些代码
           showmodal;
        finally
          Result := ModalResult;
          Free;
        end;
      end;
    end;至于时间长,可以跟踪一下,看看哪些代码操作占用时间。
    也可以部分的屏蔽代码,圈定耗时的语句部分。
      

  9.   

    哦,那我试试还有我RzPageControl每个RzTabSheet中都有数个CxTextEdit,在RzTabSheet互相切换时会出现窗口延时,第二个窗口已经显示出来,但还能看到第一个窗口瞬间消失的图像影子。不知是什么原因
      

  10.   

    用了DataController.BeginUpdate ;
    DataController.EndUpdate ;吗?
      

  11.   

    还有我RzPageControl每个RzTabSheet中都有数个CxTextEdit,在RzTabSheet互相切换时会出现窗口延时,第二个窗口已经显示出来,但还能看到第一个窗口瞬间消失的图像影子。不知是什么原因
      

  12.   

    你可以这样,在窗口上放一个timer,onshow里写timer。enabled=true,把你的代码放在timer事件里
      

  13.   


    程序最小化再恢复时会再次执行onshow事件???不会吧!!
      

  14.   

    我RzPageControl每个RzTabSheet中都有数个CxTextEdit,在RzTabSheet互相切换时会出现窗口延时,第二个窗口已经显示出来,但还能看到第一个窗口瞬间消失的图像影子。不知是什么原因这个有解吗?