`
wangleifire
  • 浏览: 500067 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C#中使用try catch对系统性能的影响和处理机制的学习总结!

    博客分类:
  • c#
阅读更多

问题1:当一段代码被try块包围后与不加try时在没有异常发生的情况下,执行过程是否有区别?

问题2: 如果有区别,那么这样的区别对性能的影响有多大呢?

问题3: try的代码究竟做了些什么?他对代码做的是每次执行时监视还是以类似中断的的方式,当出现异常时主动调用什么过程转向异常处理.?

问题1的回答:

     ①: try{}部分和不加try/catch语句块的效率几乎一样, catch{}部分似乎需要100倍以上的时间 ,所以只要不把try{}catch{}作为你的程序的逻辑,这种设计就是合理的.

   ②:从我的经验看来,在 try 中的代码和在没有 try 的情况下的效率是一样的,没有影响。

问题2的回答:

①当同一类型的异常被第一次抛出的时候,明显可以感到效率的降低;但其后再抛出就没什么感觉了。还是什么文章中看到过这样的说法:CLR的异常处理机制相比C++要高效很多。

②:就我学到的编译知识,感觉TRY CATCH会小小影响编译的速度,因为翻译模式内要回填异常的处理地址,而在运行期间应该不会影响速度

③:没什么大的影响,对现在的机器配置来说,这点影响微不足道

④:对效率的影响不大,可以放心使用。因为就算你不写代码去捕获可能出现的异常,.net Framework在运行时也会帮你捕获运行时出现的异常,转向其异常处理程序,结果就是弹出对话框来提示你,我想大家在调试的时候都见识过吧。  

问题3的回答:

①:从硬件角度讲,异常和中断是同样的机理,都是在满足一定的条件的时候,由软件和硬件触发,并通过向量转到相应的处理程序。因此,异常在没有被触发的时候,应该是不会对性能造成影响的。
另外,.net在产生异常时是逐步向外层查找处理程序的,就是说,如果当前函数中没有对异常进行处理,才查找调用当前函数的那一个函数,一直找遍整个应用程序,如果还没有,就交给runtime,在这种情况下,效率才是最低的,而且比较难于处理。

②:如果发生了异常,我认为捕获的越早效率越高,但往往我们需要在一个合适的层面上来捕捉,所以有一个平衡问题,还是得具体问题具体分析.  

③:个人觉得try catch语句是侦测语句。
try{
需要侦测语句
}catch(跟踪错误类){
错误操作语句
}
try侦测语句运行情况.
当侦测语句运行出错时,抛出错误类,然后根据错误类提供的信息,执行错误操作语句.   
使用try catch语句效率低下我觉得有几个原因,首先由于程序需要进行错误侦测,那么执行侦测语句时需要更多的资源,其次,错误操作语句也要消耗相应的资源.  

以上全部摘抄自网络,制作了表达上的些许修改.

我的总结:

      .net在产生异常时是逐步向外层查找处理程序的,因此可以说捕获的越早效率越高.如果当前应用程序没有对异常进行处理,就交给runtime,在这种情况下,效率才是最低的,而且比较难于处理。

对于性能上的开销,按照以上的信息基本可以忽略,因为"就算你不写代码去捕获可能出现的异常,.net Framework在运行时也会帮你捕获运行时出现的异常,转向其异常处理程序...".所以只要你的catch是用来捕获的不可预知的异常应该就不会有 额外的开销.

新的疑问:异常交给runtime进行处理效率才是最低的!?

经验告诉我似乎即使程序不出现异常时似乎加了try catch的还是要稍慢,个人认为不加try catch时代码的运行速度应该比较快.

猜测:我想编译时在哪个层次上有异常处理应该是被标记了的.该层以下一旦有catch类型异常就跳转到catch块.从而也影响了最终编译程序的大小.

分享到:
评论

相关推荐

    C# 中的try catch finall 的使用方法

    这个能便于开发者开发代码,迅速生成代码,希望大家多多下载。

    C#中Try-Catch语句真的影响程序性能吗?

    很多帖子都分析过Try-Catch的机制,以及其对性能的影响。 但是并没有证据证明,Try-Catch过于损耗了系统的性能,尤其是在托管环境下。记得园子里有位网友使用StopWatch分析过Try-Catch在不同情况下,与无Try-Catch的...

    C# try-catch与switch操作.rar

    C# try-catch与switch操作.rar

    C#中的try catch finally用法分析

    主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下

    异常处理例子,try...catch,C#源代码,和大家分享

    异常处理例子,try...catch,C#源代码,和大家分享

    try-catch用法

    try { Console.Write("请输入整数x:"); int x = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入整数y:"); int y = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("x/y={0}", x / y);...

    C#中try…catch的使用与常见面试题分享

    最近在翻看之前总结的常见面试题中,发现关于try…catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下。 try..catch语法  try-catch语句由一个try块后跟一个或多个catch子句构成,这些子句制定不同...

    C#异常处理总结及简单实例

    C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 1、try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。 2、catch:程序通过异常处理程序捕获异常。catch ...

    C#异常处理中try和catch语句及finally语句的用法示例

    try-catch 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做的是确保引发适当的异常。 示例 在此示例中,...

    C# 使用 StreamWriter 写入数据

    C# 使用 StreamWriter 写入数据 C# 使用 StreamWriter 写入数据 C# 使用 StreamWriter 写入数据 C# 使用 StreamWriter 写入数据 C# 使用 StreamWriter 写入数据 C# 使用 StreamWriter 写入数据

    SQL Server 2005 中使用 Try Catch 处理异常

    TRY…CATCH是Sql Server 2005/...Sql Server中的Try Catch和C#,JAVA等语言的处理方式一脉相承.这种一致性才是最大的创新之处. 一、SQL SERVER 2000中异常处理 CREATE PROC usp_AccountTransaction @AccountNum INT,

    再谈异常处理try catch finally

    在上篇文章杂谈异常处理try-catch-finally中主要详细介绍了C#异常处理的概念,异常设计准则,基础知识等方面的内容,但对如何正确使用异常处理印象还不是特别深刻吧。在这篇中,我通过查找以前系统代码中存在坏味道...

    C#中try...catch的使用与常见面试题分享

    首先给大家介绍了关于C#中try...catch的语法,而后又给大家分享了关于C#中try...catch最常见的面试题,具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。

    C#源码学习 图书订购系统

    学习C#编程 摘录一点 using System; using System.Collections.Generic; using System.Windows.Forms; namespace Microsoft.Samples.MsmqSample { static class Program { /// /// The main entry point for ...

    C#高级编程 错误和异常

    C#高级编程(第七版)学习笔记 错误和异常,介绍了C#编程中如何使用try catch捕获错误信息,如何处理异常

    c#学习笔记.txt

    try-catch 语句由一个 try 块和其后所跟的一个或多个 catch 子句(为不同的异常指定处理程序)构成。try-catch 语句采用下列形式之一: try try-block catch (exception-declaration-1) catch-block-1 catch ...

Global site tag (gtag.js) - Google Analytics