我在下面的内部应用程序中有拼写检查的方法。作为一个新的程序员,它通过多种渠道拼凑起来并进行调整,直到它为我工作。正确的互操作清理
随着我的成长和学习,我遇到了让我走的事情,嗯。像这个SO帖子,How to properly clean up Excel interop objects in C#,谈论正确的互操作清理。
我注意到它反复提到使用Marshal.FinalReleaseComObject()
或Marshal.ReleaseComObject()
。
我的问题是基于下面的代码我也需要这个呢?谢谢
public string CheckSpelling(string text)
{
Word.Application app = new Word.Application();
object nullobj = Missing.Value;
object template = Missing.Value;
object newTemplate = Missing.Value;
object documentType = Missing.Value;
object visible = false;
object optional = Missing.Value;
object savechanges = false;
app.ShowMe();
Word._Document doc = app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
doc.Words.First.InsertBefore(text);
Word.ProofreadingErrors errors = doc.SpellingErrors;
var ecount = errors.Count;
doc.CheckSpelling(ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional);
object first = 0;
object last = doc.Characters.Count - 1;
var results = doc.Range(ref first, ref last).Text;
doc.Close(ref savechanges, ref nullobj, ref nullobj);
app.Quit(ref savechanges, ref nullobj, ref nullobj);
return results;
}
所以我会考虑添加这3行? '对Marshal.ReleaseComObject(DOC); Marshal.ReleaseComObject(app); Marshal.ReleaseComObject(errors);' – 2010-01-13 19:44:14
是的,我会说应该照顾它。你需要确保你在try中包装现有代码... finally块并释放finally块中的COM对象,以确保它们实际上得到清理。 – 2010-01-13 20:22:34
谢谢!最后的澄清,我也会自己研究它,我是否也需要'Marshal.FinalReleaseComObject()'?我不确定这种不同之处在哪里。 – 2010-01-13 20:34:27