我不想讨论什么时候抛出异常,什么时候不抛出异常.我想解决一个简单的问题.99%的情况下,不抛出异常的理由都是围绕着异常的速度,而另一方(通过基准测试)声称速度不是问题.我读过很多关于这方面或那方面的博客、文章和帖子.那是哪一个呢?

答案中的一些链接:Skeet,Mariani,Brumme.

推荐答案

我站在"不慢"的一边——或者更准确地说,"不够慢,不值得在正常使用中避免它们".关于这件事我写了两篇shortarticles.有人对基准方面提出了批评,这主要是因为"在现实生活中,会有更多的堆栈需要处理,所以你会 destruct 缓存等等"——但使用错误代码沿着堆栈往上移动会 destruct 缓存,所以我不认为这是一个特别好的论点.

我只想说明一下-我不支持在不符合逻辑的情况下使用异常.例如,int.TryParse完全适合于转换来自用户的数据.当读取机器生成的文件时,这是不合适的,因为失败意味着"文件不是它应该采用的格式,我真的不想try 处理这个问题,因为我不知道还会有什么错误."

在"仅在合理情况下"使用异常时,我从未见过应用程序的性能因异常而显著受损.基本上,除非你有重大的正确性问题,否则异常不应该经常发生,如果你有重大的正确性问题,那么性能并不是你面临的最大问题.

.net相关问答推荐

.NET模拟具有泛型返回类型的方法

PowerShell 5.1和7在使用证书时的区别

我的Azure应用服务从哪里获取应用设置?

如何在dotnet中使用OpenTelemetry Prometheus导出器导出多个版本的度量?

.net Maui 在单击按钮时访问 CollectionView 中的数据项

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

防止对话框在按钮的单击事件处理程序中关闭

使用泛型装箱和拆箱

IEnumerable Count() 和 Length 的区别

如何以编程方式 Select ListView 中的项目?

为什么字典比列表快得多?

如何允许程序集(单元测试)访问另一个程序集的内部属性?

在 .NET 中计算目录大小的最佳方法是什么?

判断 .NET 中的目录和文件写入权限

使用 LINQ 搜索树

是 C# 中的 bool 读/写原子

表单不响应 KeyDown 事件

obj 文件夹是为了什么而生成的?

模拟和单元测试需要时如何抛出 SqlException?

在 .NET 中乘以时间跨度