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中文网其他相关文章!