Delphi XE2中的IExplorerBrowser性能问题

时间:2014-06-26 21:15:24

标签: performance delphi com delphi-xe2

我正在尝试编写一个多面板,多标签的文件管理器。我一直在使用IExplorerBrowser,但与Windows资源管理器相比,性能非常糟糕。创建单个实例并不是太糟糕,但如果我创建一个2面板,每个面板管理器有2个选项卡,我有4个IExplorerBrowser实例。创作非常缓慢。一旦创建了性能是可以接受是否有加速它的技巧或这只是COM的缺点之一?我的初始化代码看起来很像下面的内容(异常处理和其他不重要的细节已删除)。

    TMyClass = class(TFrame)
      ...
      Panel1: TPanel;
      ...
    private
      ...
      FExplorerBrowser: IExplorerBrowser;
      FAdviseCookie: Cardinal;
      FSelectedPIDL: PItemIDList;
      procedure Initialize;
      ...
    protected
      ...
    public
      ...
    published
      ...
    end;

    procedure TMyClass.Initialize;
    var
      FS: TFolderSettings;
      R: TRect;
      HRes: HRESULT;
    begin
      HRes := CoCreateInstance(CLSID_ExplorerBrowser, nil, CLSCTX_INPROC, IID_IExplorerBrowser, FExplorerBrowser);

      if Succeeded(HRes) then
      begin
        FS.fFlags := 0;
        FS.ViewMode := FVM_DETAILS;

        R := Rect(0, Panel1.Height, ClientWidth, ClientHeight);
        HRes := FExplorerBrowser.Initialize(Handle, R, FS);

        if Succeeded(HRes) then
        begin
          HRes := FExplorerBrowser.SetOptions(EBO_SHOWFRAMES);

          if Succeeded(HRes) then
          begin
            HRes := FExplorerBrowser.Advise(Self as IExplorerBrowserEvents, FAdviseCookie);

            if Succeeded(HRes) then
            begin
              if FSelectedPIDL  nil then
                HRes := FExplorerBrowser.BrowseToIDList(FSelectedPIDL, 0);
            end;
          end;
        end;
      end;
    end;

特别是对CoCreateInstance的调用是瓶颈。有什么建议吗?

我在Windows 7上使用Delphi XE2。

谢谢, 迈克尔

0 个答案:

没有答案