C# 4.0 C#应用程序在列表内崩溃。枚举器

C# 4.0 C#应用程序在列表内崩溃。枚举器,c#-4.0,C# 4.0,我的公司编写的一个软件有问题,它是一个实时服务器,作为windows服务运行,使用RabbitMQ与WebApplication/Silverlight客户端进行接口。它在启动服务后10分钟到2周内意外崩溃。应用程序事件查看器中记录了2个错误(我已将类和exe名称替换为XXX): 来源:应用程序错误,事件ID:1000,任务:(100) 故障应用程序XXX.exe,版本0.0.1.18195,时间戳 0x4e4a015e,故障模块clr.dll,版本4.0.30319.1,时间戳 0x4BA21

我的公司编写的一个软件有问题,它是一个实时服务器,作为windows服务运行,使用RabbitMQ与WebApplication/Silverlight客户端进行接口。它在启动服务后10分钟到2周内意外崩溃。应用程序事件查看器中记录了2个错误(我已将类和exe名称替换为XXX):

来源:应用程序错误,事件ID:1000,任务:(100)

故障应用程序XXX.exe,版本0.0.1.18195,时间戳 0x4e4a015e,故障模块clr.dll,版本4.0.30319.1,时间戳 0x4BA21EB,异常代码0xc0000005,故障偏移量 0x000000000018063e,进程id 0x%9,应用程序启动时间0x%10

源:.NET运行时,事件ID:1023,任务:无

应用程序:XXX.exe框架版本:v4.0.30319说明: 由于.NET运行时的内部错误,进程已终止 IP 000007FEF973063E(000007FEF95B0000),出口代码80131506

正在引发以下异常。它在遍历列表的底层数组时似乎遇到了问题,我无法理解它是如何为null的

XXX`1[XXX];异常:System.NullReferenceException:对象 引用未设置为对象的实例。在 System.Collections.Generic.List`1.Enumerator.MoveNext()位于 System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()位于 System.Collections.Generic.List`1.InsertRange(Int32索引, IEnumerable`1集合)

我曾尝试将ADPlus连接到该服务,但它速度太慢,无法使用。由于Watson博士不再可用,很难获得内存转储,有人能推荐其他不会对性能造成太大影响的工具吗


以前有人见过类似的情况吗?

如果Windows服务中的后台线程出现异常,该服务将崩溃。看起来传递到
InsertRange
IEnumerable
null

解决了这个问题,问题应该会消失,但是您仍然容易发生崩溃。我建议您的所有后台线程捕获并处理异常。例如,要启动安全线程池线程,可以执行以下操作:

ThreadPool.QueueUserWorkItem(o =>
    {
        try
        {
            //...
        }
        catch (Exception e)
        {
            Log.Error(e);
        }
    }