加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 优化TWebBrowser的绘制以减少总CPU使用率

发布时间:2020-12-15 09:28:09 所属栏目:大数据 来源:网络整理
导读:我有一个表单,其中包含一个加载 HTML文档的TWebBrower组件. HTML文档上的数据每隔几秒更新一次,有时每秒更新一次,我使用以下命令更新Delphi中的值: DOMDocument.getElementById(elementID).innerHTML := someValue; 问题是我想锁定窗口/ webbrowser以防止它
我有一个表单,其中包含一个加载 HTML文档的TWebBrower组件. HTML文档上的数据每隔几秒更新一次,有时每秒更新一次,我使用以下命令更新Delphi中的值:

DOMDocument.getElementById(elementID).innerHTML := someValue;

问题是我想锁定窗口/ webbrowser以防止它绘制/更新,直到我的所有更新都完成.有没有办法做到这一点?会打电话给

SendMessage(WebBrowser.Handle,WM_SETREDRAW,0);

我希望在优化此代码方面提供一些帮助,以便我的总CPU使用率不会持续很高.

解决方法

由于您的主要问题是更新频率,因此您需要减少它.为此,您可以简单地存储上次更新HTML文档的时间,并在下次数据更改时检查自该时间以来是否经过了一段时间.

以下是显示如何执行此操作的代码.以下示例中的FUpdatePeriod是更新周期(以毫秒为单位).然后,如果您定期调用UpdateChanges,则仅在自上次更改后至少经过1000毫秒时才更新innerHTML(此处为伪代码).

unit Unit1;

interface

uses
  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,MSHTML,OleCtrls,SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
  private
    FLastUpdate: Cardinal;
    FUpdatePeriod: Cardinal;
    procedure UpdateChanges(const AData: WideString);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FUpdatePeriod := 1000;
end;

procedure TForm1.UpdateChanges(const AData: WideString);
begin
  if (GetTickCount - FLastUpdate > FUpdatePeriod) then
  begin
    (WebBrowser1.Document as IHTMLDocument2).body.innerHTML := AData;
    FLastUpdate := GetTickCount;
  end;
end;

// now remains to call the UpdateChanges periodically

end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读