InvalidOperationException和NullReferenceException

时间:2011-11-23 19:03:35

标签: c# asp.net .net

当我调试我的应用程序时,我得到了很多InvalidOperationException和NullReferenceException,如下所示:

A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
A first chance exception of type 'System.NullReferenceException' occurred in XGen.Framework.DLL

它会使应用程序变慢吗?

编辑:

找到发生InvalidOperationException的地方

public static Value.Locale Get(string value)
    {
        try
        { return _Items.First(itm => itm.ID.ToUpper() == value.ToUpper() || itm.Name.ToUpper() == value.ToUpper()); }
        catch (Exception)
        { return new XGen.Framework.Value.Locale(); }
    }

翻译文本:序列不包含任何元素匹配

我应该检查_Items.Count> 0?

5 个答案:

答案 0 :(得分:3)

它不可能使你的应用程序更快,所以是的,它会使它变慢,但当然“慢”是相对的。我会更关心的是,这些异常是由于应用程序中的逻辑错误导致的,而不是它运行的速度。

答案 1 :(得分:2)

如果他们不让你的程序变慢,那么它们应该是特殊的。 如果您知道_items可以为空且不是例外,那么这是正常的流程,并且不应该使用异常处理它。 您可以查看点数,或只拨打FirstOrDefault而不是First ...

答案 2 :(得分:1)

你必须开始缩小它们,以弄清楚发生了什么。我的猜测是因为这个XGen.Framework.DLL做了一些不好的事情(在System.Core中导致InvalidOperationException),但是为你优雅地处理它,这就是应用程序继续运行的原因。

您可以告诉调试器在第一次更改异常时停止,并检查堆栈跟踪。

答案 3 :(得分:1)

从Jon Skeet看到这个答案,他觉得他们在合理使用时不会减慢应用程序的速度,但是你的情况似乎并不正常:

  

如果您遇到异常严重的问题   伤害你的表现,你在使用方面遇到了问题   超出绩效的例外。

How slow are .NET exceptions?

答案 4 :(得分:0)

first chance exception意味着代码中有些异常被抛出但被捕获和处理。在你的情况下,你会得到很多NullReferenceExceptionInvalidOperationException,其中大部分时间都在某处显示错误(属性或字段未初始化,调用处于无效状态的对象)。所以我不会太担心速度,而是更关心你的正确性。