第一次机会异常错误处理导致带有多个单词实例的内存不足

时间:2017-10-16 16:47:19

标签: c# error-handling

嘿我遇到了我创建的应用程序的问题。基本上在最初几周,我试图介入以捕获所有第一次机会异常,将它们记录到数据库并继续照常进行。现在这里贴纸我不想让应用程序关闭。我只是想记录错误并继续,所以app.quit等不是我想要的。如果它遇到了未处理的异常,我就有了一个单独的错误处理程序。这很好但是它导致多个单词实例打开并导致我的系统从内存不足中崩溃。所以我的问题是,有没有人知道如何最好地实现这个或任何关于如何解决这个问题的建议?

enter image description here

代码非常简单。

 AppDomain currentDomain = AppDomain.CurrentDomain; 
 currentDomain.FirstChanceException += LogException;




public async Task LogException(string exception)
{
    var word = new Microsoft.Office.Interop.Word.Application();
    var winVer = Environment.OSVersion.ToString();

    CiteRightException exceptionData = new CiteRightException();           
    exceptionData.stackTrace = exception;
    exceptionData.windowsVersion = word.Version;
    exceptionData.windowsVersion = winVer;            

    var content = new StringContent(Json.Encode(exceptionData), 
    Encoding.UTF8, "application/json");
    await httpClient.PostAsync("/api/logException", content);
}

我尝试过使用.quit方法(没有停止额外的实例打开)并认为它可能是一个线程问题currentThread.join()但仍然正在创建新实例。如果我注释掉firstchanceexception行,一切正常,所以100%来自这里。

非常感谢

1 个答案:

答案 0 :(得分:3)

您必须处置所有COM对象。

请参阅此Disposing of Microsoft.Office.Interop.Word.Application

在你的情况下:

form_type = ''
transcript = Transcript()
transcript.file_path = ''

PS :在try .. finally块中执行,以防万一你有其他异常。