2011-03-18 36 views
2

我最近在Word对象模型的性能方面遇到了一些问题。在我为Word编写的插件中,我需要解析文档中的所有单词,并替换其中的一些单词,或者向用户提供具有多个替换单词的单词。我知道一次向Word提供所有文档文本内容并将其处理并重新放回所有文档都会更快,但这不适合我的加载项,因为我需要访问范围表示具有多个替换的单词的对象,以便我可以以某种方式将它们标记在文档中,并向用户呈现工具提示,从而可以从中选择他想要的替换。从多个线程访问word文档的单词列表

因此,目前我脑海中出现的单次极速改善是多线程化,因为大多数人已经拥有双核或更好的性能。问题在于,你在Google上发现的所有内容都表明,在Office中进行多线程是一件非常糟糕的事情。

那么有没有人设法以大多数用法的方式做到这一点?通过这个我的意思是,如果它也适用于其他电脑那么发展呢?

第二个问题是:有人知道为什么Microsoft将Word(Office)对象模型限制为单线程?只是出于好奇:)

回答

1

Office中的多线程应该工作得很好。下面是微软正是这样做的一篇文章:

Walkthrough: Multithreading with the BackgroundWorker Component (C# and Visual Basic)

Office对象模型不是单线程而是单线程单元(STA)。这实际上是所有VB.Net程序的默认状态( C#默认为MTA )。要了解更多关于STA VS MTA请查看以下链接:

+0

其实,当你创建一个C#应用程序,它增加了' [STAThread]'属性默认... – configurator 2011-03-18 13:46:54

+0

@configurator,你是对的。我可以发誓C#曾经是MTA,但我在2008年和2010年做了一个测试,他们都使用STA。也许2005年使用MTA。我可能不得不挖掘一个旧版本,并找出现在。 – 2011-03-18 13:55:07

+0

我认为STA自2003年以来一直是默认的...... – configurator 2011-03-18 13:58:21