抛出异常时尝试捕获性能问题

时间:2017-01-13 14:09:33

标签: c# performance try-catch

我刚刚看到一个看起来非常像这样的代码:

    public static string GetXmlAttributeValue(XmlNode Node, string attributeName, string defVal)
    {
        try
        {
            return Node.Attributes.GetNamedItem(attributeName).Value;
        }
        catch(Exception)
        {
            return defVal;
        }
    }

此方法的ideea是尝试获取节点的属性,如果没有则返回默认值。将代码更改为以下内容后:

    public static string GetXmlAttributeValue(XmlNode Node, string attributeName, string defVal)
    {
        if(Node.Attributes.GetNamedItem(attributeName) != null)
            return Node.Attributes.GetNamedItem(attributeName).Value;
        return defVal;
    }

我看到了性能的大幅提升。更确切地说,在大约5000次调用此函数时,第一次实现需要大约2秒,而第二次实现几乎是即时的(我需要提到属性不存在的概率非常高,所以会发生很多事情。)

我的问题是为什么会发生这种情况?我google-ed try catch如何工作,但没有发现任何可以澄清我的问题

1 个答案:

答案 0 :(得分:0)