我在下面的內部應用程序中有拼寫檢查的方法。作爲一個新的程序員,它通過多種渠道拼湊起來並進行調整,直到它爲我工作。正確的互操作清理
隨着我的成長和學習,我遇到了讓我走的事情,嗯。像這個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