performance - 对于某些用户配置文件,在Powershell中使用Word.Application的速度非常慢

标签 performance powershell ms-word office-interop com-interop

我在Powershell中编写了很多脚本,现在想修改一些Microsoft Word文档。我注意到我的脚本在某些服务器上运行很快,而在其他服务器上运行非常慢。经过进一步分析,似乎为某些用户配置文件使用Word.Application COMObject的速度很快,但是对于同一服务器上的其他一些用户配置文件,它的运行速度却非常慢。

同时,我仅用几行代码就可以重新创建问题-基本上每个方法或 Action 似乎都受到影响。

这是我在做什么:

  • 打开新文档
  • 添加一些文字
  • 等待5秒
  • 添加更多文本

  • 没什么特别的,没有火箭科学-但是在5秒钟的停顿后用单词做任何事几乎是不可能的。

    这是我的代码:
    $WordApp1 = New-Object -ComObject Word.Application 
    $Word1 = $WordApp1.Documents.Add()
    $WordApp1.Visible=$true
    $selection=$WordApp1.Selection
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    Start-Sleep -Seconds 5
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    (Measure-Command {$selection.TypeText("test")}).TotalMilliseconds
    

    结果是:
    77.3065    
    91.4125    
    63.3547   
    80.9694  
    71.1408   
    87.1482    
    10491.071          <----- LOOK HOW LONG IT TOOK    
    10329.0877        <----- LOOK HOW LONG IT TOOK
    

    为什么会发生这种情况,我该如何避免呢?

    我已经尝试过以相同的奇怪行为使用书签,查找/替换和MailMerge。我做了一个“修复安装”,并且没有改进就重置了Word用户设置。

    VBA中的相同代码可以正常且快速地工作,因此必须与Powershell或Word类有关系。 Word是2010,Powershell 4.0,Server 2008R2。发生在多台服务器上,但仅适用于某些用户配置文件。受影响的用户配置文件具有本地管理员权限。

    也许与Interop.class有关?也许是错误,我需要特定的修补程序/补丁?

    最佳答案

    如果您仅处理开放的XML文档,我建议您改用Open XML SDK。有关更多信息,请参见Welcome to the Open XML SDK 2.5 for Office

    事实是 Microsoft当前不建议并且不支持从任何无人参与的非交互客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT Services)自动化Microsoft Office应用程序,因为Office可能在此环境中运行Office时,将表现出不稳定的行为和/或死锁。

    如果要构建在服务器端上下文中运行的解决方案,则应尝试使用对无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果您使用服务器端解决方案中的Office应用程序,则该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。在MSDN中的Considerations for server-side Automation of Office文章中了解有关此内容的更多信息。

    关于performance - 对于某些用户配置文件,在Powershell中使用Word.Application的速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306266/

    相关文章:

    excel - 如何使用 VBA 将 HTML 插入 Word?

    excel - VBA TypeText Word Wrapping 内联与前一行的缩进

    android - 测量android浏览器的性能

    android - 更新 UI 时响应键盘

    Android ListView 刷新单行

    windows - Windows RT 中的 Powershell 命令

    .net - 执行 [adsisearcher] 并将其存储在哈希表或字典集合列表中的最快方法

    powershell - 循环遍历 Azure 对象并筛选标签

    excel - VSTO - Word 和 Excel 的共享插件以修改功能区

    php - php 中哪个更快且占用资源更少?