我最近从Visual Studio 2008的升级我的项目到Visual Studio 2010。

在Visual Studio 2008中,这个代码分析规则不存在。

现在我不知道我是否应该使用此规则或没有。

所以它阻止人们做错误的安全显得重要的我要建一个开源库。但是,如果所有我要做的就是抛ArgumentNullException当参数是null,好像写无用的代码,因为ArgumentNullException会被抛出,即使我不会写代码。

修改同时,存在性能问题,需要加以解决。在每一个公共方法检查null可引起性能问题。

我应该删除规则或修正违规?

有帮助吗?

解决方案

这取决于。使用ArgumentNullException时约定是在描述中包括空参数的名称。因此,主叫方就会知道到底哪里出了问题。

一个NullReferenceException的源极(也就是当您不验证会发生什么)可以是容易被发现,但如果该方法复杂,可能更加困难。您可以在一行的代码,其中多次引用可能是空告终。

我个人更喜欢有公共方法抛出ArgumentNullException如果他们不能处理空输入给定参数,因为它允许一个一致的行为,无论该方法是如何实现的。

在回答编辑:在我看来,它更重要的是提供一套一致的接口比优化的每一行代码一些惊喜。我的猜测是,在大多数情况下,空校验的性能开销不会显著。如果它变成是一个问题(如在剖析是这么说的),我会考虑改变它。否则,我不认为它在这一点上存在问题。

其他提示

我们继续,因为我们决定,这是总是最好的检查他们第一次进入你的代码参数此规则。这样,当你使用代码的人变得异常在它的背景下会更好。人谁不有你的源代码,例如会看到,这个例外是在你的代码抛出,可以对您有一个bug报告,浪费你的时间和他们的。

恕我直言号检票空值几乎永远不会在你的应用程序中的性能瓶颈。 (而在万里挑一的情况下它是显著,你将与你的探查和删除一个情况下找到它)。

这应该成为你心目中的另一个问题是“是抛出新的NullReferenceException()真的来处理错误的最好方法?”通常你可以比这更好的处理事情(哪怕只用于调试目的提供给用户更好的错误报告和/或自己)。在许多情况下的代码可以处理空值摆好,使得无需为这是一个错误的。

修改

要回答您的编辑:null检查真的不长的时间。对于简单的调用方法的开销将是如果不是几十上百次超过空校验。其中,空校验将使任何显著差异的唯一地方是在一个大的,紧密的循环,你正在做的非常小的事情。这种情况不会发生非常频繁 - 通常你会检查空,然后做一些与基准比较昂贵的。

有任何情况下崩溃或出现故障是一件好事。它始终是更好地“减慢你申请下来”和null检查,而不是崩溃了,失去了客户的数据。

所以,不要过早地优化代码。写得很好,为维护和健壮,然后配置文件它看到瓶颈所在。我一直在编程了28年,是非常宽松的使用和null检查,并具有的从不的发现,一个空检查是一个性能问题的原因。通常它的东西等做大量的不必要的工作在一个循环中,使用为O(n ^ 3)算法,其中一个为O(n ^ 2)的方法是可能的,没有缓存昂贵到计算值等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top