Working with MSWord using OLE in Delphi 10.3



在Delphi10中使用OLE访问MSWord时,我遇到了一个奇怪的性能问题。这些问题在不同的用户之间是不一致的,在我们将项目从XE转移到10.3之后,我们开始得到他们的报告。

我已经将这个例子简化到了最基本的层次:创建了一个新的VCL应用程序项目,并在表单上放置了一个按钮,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
W: OleVariant;
begin
W := CreateOleObject('Word.Application');
W.Quit;
W := Unassigned;
end;

它在我的计算机上运行良好,但在我的同事的计算机上退出该过程后,它会冻结大约一分钟,而我的同事对真实产品也有性能问题。我们都在功能强大的Win10 x64系统计算机上工作。

是什么原因导致在退出常规时如此长时间的停顿?有什么办法避免它吗?

你没有做什么特别的事情。

在Delphi方面应该没有区别,我敢打赌,在完全相同的代码上,旧的Delphi版本肯定会发生相同的情况。

我要检查的第一件事是:自动生成的Word代码是否相同?然后我记不起细节了,但有区别。对于Office应用程序,您可以获取指向正在运行的应用程序的COM指针或启动一个应用程序。有了另一个电话,你每次都会得到你的"拥有";仅用于应用程序的实例。

但我认为这不太可能是你的最小场景中的原因。

所以另一种猜测是:这是COM对象内部的一个函数在起作用。我建议使用ProcessMonitor记录Word的操作。过滤除Word或实例PID之外的所有内容。你应该在日志中找到阻碍Word的东西。(注册表、网络或文件(

最新更新