我正在尝试编写一个多面板,多标签的文件管理器。我一直在使用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。
谢谢, 迈克尔