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

标签 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%来自此处。

首先十分感谢

最佳答案

您必须处置所有COM对象。

请看这个Disposing of Microsoft.Office.Interop.Word.Application

在您的情况下:

System.Runtime.InteropServices.Marshal.ReleaseComObject(word)

PS :尝试尝试..最终阻止,以防万一您还有其他异常。

关于c# - 第一次机会异常错误处理,导致带有单词的多个实例出现内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46775231/

相关文章:

C# Array.Reverse 反转按值传递给方法的原始数组

c# - 为什么不是在 C# 中调用所有静态构造函数(即父类的构造函数)?

php - 如何使用PHP中的严格报告管理错误?

error-handling - 如何在jena sparql中执行删除查询?

bash - 您将如何改进此Shell脚本以在执行每个任务之前检查错误?

c# - 将数据转换为 JSON 流时出现 Type cannot be serialized 错误

c# - 使用 ASP.NET async/await 进行线程管理

c# - 查找字符串的公共(public)前缀

C - 获取字符串检查它并使其成为 double

android - Android有没有可访问的错误日志