【发布时间】:2015-04-18 15:17:38
【问题描述】:
我有一个单词插件,用 C# 编写。当用户从功能区中选择一个选项时,自定义任务窗格(用户控件)会在应用程序 (Word) 中打开。
在此任务窗格中,他们按下运行,然后以一系列相当复杂的方式分析活动文档。检查,例如询问文档中的任何粗体文本等等。运行整个过程可能需要 5 秒到 1 分钟,具体取决于文档。这很好,没有人有这个问题。
当我们尝试实现取消按钮时,问题就来了。为此,我尝试使用后台工作人员。一切正常......除了从线程(后台工作人员)与文档通信时,它比从主线程运行时慢大约 7-8 倍。我一直无法找到这方面的太多信息,任何建议或帮助将不胜感激。
我尝试过其他途径(打开 xml),但这些都不是可行的选择(我们必须处理 .doc 和 .docx)
谢谢
举个例子:
我在任务窗格上有一个按钮(运行)。
调用 private void btnRun_Click
这反过来又会触发后台工作程序 backgroundWorker1.RunWorkerAsync();
在后台worker的do work方法中,我有这样的代码:
myClass.Method()
在 myClass 中会有一行代码,例如:
对于 ActiveDocument.Fields 中的每个 Word.Field
从主按钮单击线程运行可能需要 1 秒,从后台工作线程运行最多可能需要 30 秒。所有其他代码都运行良好,只有访问 Word 文档的代码似乎有问题
【问题讨论】:
-
不看代码就很难说为什么它慢了。您可能正在执行许多在前台线程中运行操作时不存在的跨线程调用,或者任何其他原因。没有看到代码,很难告诉你如何解决这个问题。
-
感谢您回答罗恩。基本上,速度较慢的部分是访问 word 文档的任何代码行。我会用一个例子来修改我上面的帖子
-
您是否尝试过使用分析器来查看最耗时的调用在哪里?
标签: c# background com ms-word backgroundworker