Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#实时试捕_C#_Real Time_Throw_Try Catch - Fatal编程技术网

C#实时试捕

C#实时试捕,c#,real-time,throw,try-catch,C#,Real Time,Throw,Try Catch,我想要一个真正用C#做实时编程或者真正理解语言内部结构的人的回复 我知道异常不应用于处理正常处理,而应仅用于检测错误条件。关于这个话题有很多讨论 我想知道是否有任何运行时速度从简单的try/catch块(除非程序必须结束,否则它永远不会捕获异常)变慢。try/catch块位于必须重复调用的函数内。我怀疑这只是最低的成本 成本可以用CPU周期或其他任务(与浮点乘法相同的成本)或其他方式来量化吗 我们在windows XP下使用Microsoft C#.Net 3.5。.Net异常的开销非常非常低,

我想要一个真正用C#做实时编程或者真正理解语言内部结构的人的回复

我知道异常不应用于处理正常处理,而应仅用于检测错误条件。关于这个话题有很多讨论

我想知道是否有任何运行时速度从简单的try/catch块(除非程序必须结束,否则它永远不会捕获异常)变慢。try/catch块位于必须重复调用的函数内。我怀疑这只是最低的成本

成本可以用CPU周期或其他任务(与浮点乘法相同的成本)或其他方式来量化吗


我们在windows XP下使用Microsoft C#.Net 3.5。

.Net异常的开销非常非常低,除非抛出它们。使用try/catch块将对性能产生非常小的影响。我发现,即使在非常快速、紧密的循环中,异常处理也几乎没有影响

然而,.NET中的异常在抛出时非常昂贵。如果您将它们与许多其他语言相比较,它们往往会对性能产生很大的影响。这是由于创建异常时收集的完整堆栈信息等造成的

这与其他一些语言(如python)的行为相反,在python中,异常处理的成本较高,但抛出实际上相当高


然而,如果你担心的话,我建议你描述一下你的日常生活,然后自己测试一下。这是我在进行了相当多的性能评测之后的经验。在您自己的代码库中进行度量是无可替代的。

这里对try-catch的性能影响进行了很好的讨论


看看Jon Skeet关于异常和性能的资源:实际上,只有访问StackTrace属性,或者异常通过了流程边界(即远程处理/wcf/等),才会发生堆栈跟踪,创建异常的成本也很低,因为构造只设置了几个属性。抛出进程设置StackCrawlMarks会产生中等的成本,当StackTrace被请求时,它会促进堆栈爬网…但是在.NET 2.0中,除非您实际访问它,否则跟踪不会每次抛出都发生。是的-我实际上指的是堆栈标记机制,但我的答案不清楚。不过,在我的评测中,这确实有相当大的开销(不过,这是假设性能关键系统)。Rico Mariani有一篇很好的博客文章解释了原因,但对我来说,问题是额外的缓存未命中和页面错误:谢谢你提供的信息。不幸的是,我们没有工具来分析我们的代码。。。我们只需要遵循最佳实践。如果你正在编写实时软件,你需要一个分析器。测量是绝对不可替代的。您可以按照所有规则编写代码,而您认为将要执行的事情将是一个瓶颈——它总是发生。有许多可用于.NET的分析器,包括一些合理的免费评测工具。