我有一个winform程序,可以加载Microsoft Word并执行一些基本编辑(查找和替换),以及一些自动保存。
它会加载现有的单词模板,该模板也是基本文本。
互操作的代码是;
try
{
// Is Word running?
WordApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") as Microsoft.Office.Interop.Word.Application;
WordApp.Visible = true;
return WordApp;
}
catch (COMException ce)
{
WordApp = null;
if (ce.ErrorCode == unchecked((int)0x800401E3))
WordApp = new Microsoft.Office.Interop.Word.Application();
WordApp.Visible = true;
return WordApp;
}
一旦文档打开,用户就会输入他们需要的内容但是已经注意到在一页左右的文本之后,性能确实变慢了。用户输入的时间越来越长。
我认为最初是由于查找/替换代码的一些问题,所以除了加载模板的代码之外,我已经注释掉了所有内容;
WordApp = WordEdit.GetWord(); //Class & Method calling interop code
WordApp.Documents.Add(AppDomain.CurrentDomain.BaseDirectory + "\\Templates\\" + DocType + ".dot");
//set Active Document
WordDoc = WordApp.ActiveDocument;
表现仍然差。
然后我想释放COM并将事物设置为null,但这又没有任何效果。
System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
WordApp = null;
WordDoc = null;
然后我想也许我的应用程序导致系统一般放慢速度。如果我退出应用程序但继续使用它加载的Word应用程序,性能仍然很慢。如果我启动一个全新的Word应用程序(手动),这将完美地工作。所以它与我的应用程序加载单词的方式有关。我的应用程序对系统资源没有任何影响,并且除了加载模板之外,当前设置为什么都不做。
是否有不同的方法来掌握Word(使用互操作的不同方式)或提高性能的方法?