正确的互操作清理

我在内部应用中使用以下方法进行拼写检查.作为一个新的程序员,它是通过多种资源拼凑而成的,并经过调整直到对我有用.

随着我的成长和学习,我遇到了让我前进的事物,嗯.像How to properly clean up Excel interop objects in C#这样的SO帖子一样,它讨论了正确的Interop清理.

我注意到它反复提到使用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;
    }

解决方法:

我肯定会说.您应该始终使用Marshal.ReleaseComObject清理.NET代码中的非托管COM引用.

上一篇:如何将C数组映射到C#?


下一篇:C#-在.Net中使用kernel32