首页 > 后端开发 > C++ > C#例外情况真的比返回代码慢得多吗?

C#例外情况真的比返回代码慢得多吗?

Mary-Kate Olsen
发布: 2025-01-26 12:26:09
原创
931 人浏览过

Are C# Exceptions Really That Much Slower Than Return Codes?

C#异常的性能代价:是真是假?

C#异常的性能一直备受争议。虽然在堆栈不深的情况下,其性能损耗并不显着,但各种说法却莫衷一是。

精确的性能测试

为了解决这一问题,我们开发了一个基准测试程序,类似于Jon Skeet之前的研究。测试结果显示,处理一百万次异常耗时29914毫秒,这意味着每毫秒大约处理33次异常。这表明,在大多数情况下,异常作为返回值的替代方案,其速度足够快。

与返回值的比较

然而,使用返回值时,相同的程序在不到一毫秒内就完成了。这意味着异常的速度至少比返回值慢30000倍。需要注意的是,这些都是最小耗时,实际中抛出或捕获异常可能需要更多时间。

测试环境

测试在搭载英特尔酷睿2双核T8100 @ 2.1 GHz的笔记本电脑上进行,运行.NET 4.0发行版,未启用调试器。

测试代码

以下代码片段展示了性能比较:

<code class="language-csharp">static void Main(string[] args)
{
    int iterations = 1000000;
    Console.WriteLine("Starting " + iterations.ToString() + " iterations...\n");

    var stopwatch = new Stopwatch();

    // 异常测试
    stopwatch.Reset();
    stopwatch.Start();
    for (int i = 1; i <= iterations; i++)
    {
        try
        {
            // ...  异常代码 ...
        }
        catch (Exception)
        {
            // ...  异常处理 ...
        }
    }
    stopwatch.Stop();
    Console.WriteLine("Exceptions: " + stopwatch.ElapsedMilliseconds + "ms");


    // 返回值测试
    stopwatch.Reset();
    stopwatch.Start();
    for (int i = 1; i <= iterations; i++)
    {
        // ... 返回值代码 ...
    }
    stopwatch.Stop();
    Console.WriteLine("Return Codes: " + stopwatch.ElapsedMilliseconds + "ms");
}</code>
登录后复制

(注意:此处省略了具体的异常代码和返回值代码,仅为示例) 完整的测试代码需要包含具体的异常抛出和处理逻辑,以及返回值的判断逻辑。 只有这样才能进行更准确的性能比较。

以上是C#例外情况真的比返回代码慢得多吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板