`
wangleifire
  • 浏览: 509077 次
  • 性别: 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 的使用方法

    `catch`块用于捕获和处理`try`块中抛出的异常。每个`catch`块可以捕获特定类型的异常,或者捕获所有类型的异常。如果`catch`块的异常类型与`try`块中抛出的异常匹配,那么对应的`catch`块就会执行。 ```csharp ...

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

    总结来说,C#中的Try-Catch语句确实会对程序性能产生一定影响,但这种影响通常很小,特别是在处理可能的错误和异常情况时,其带来的安全性提升远大于性能损失。在编写代码时,应根据具体情况权衡是否使用Try-Catch,...

    使用try-catch-finally处理异常

    Java、C#等许多编程语言提供了异常处理框架,其中“try-catch-finally”是常用的一种结构。下面我们将详细探讨这个主题。 1. **异常的概念** 异常是程序执行期间发生的非正常情况,它可能由用户输入错误、文件不...

    try-catch用法

    3. **资源清理**:如果 `try` 块中使用了需要关闭的资源(如文件流),应使用 `finally` 块确保资源得到正确的释放。 4. **异常重新抛出**:在某些情况下,可能需要在捕获异常后进行一些处理,然后再重新抛出异常。...

    trycatch.zip

    总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。

    易语言简单处理TRY异常

    在实际编程中,我们可能还需要使用THROW语句手动抛出异常,以及使用CATCH、FINALLY等语句来捕获和处理异常,或者在所有异常处理完成后执行必要的清理工作。 总结一下,易语言中的TRY异常处理机制提供了处理运行时...

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

    在编程世界中,异常处理是确保程序稳定性和健壮性的重要机制。C#语言提供了强大的异常处理框架,其中`try...catch`语句块是最核心的部分。本篇将深入探讨`try...catch`在C#中的应用以及相关知识点。 异常...

    C# try-catch与switch操作.rar

    首先,`try-catch`语句用于捕获和处理程序运行时可能出现的异常。在`try`块中,你编写可能会抛出异常的代码。如果这些代码引发异常,程序会立即跳转到相应的`catch`块,以便执行错误处理代码,而不是让程序崩溃。...

    try-catch的用法和含义

    `try-catch` 结构作为异常处理的核心机制,在各种编程语言中广泛采用,如 Java、C# 和 JavaScript 等。本文将深入探讨 `try-catch` 的基本概念、语法结构及其应用场景。 #### 一、`try-catch` 的基本概念 `try-...

    C#中的try catch finally用法分析

    `try-catch-finally`语句块是C#中用于捕获和处理异常的关键结构。下面我们将详细解析这个语句块的用法,并通过实例来展示其功能。 1. `try`块: `try`块包含可能抛出异常的代码。当在`try`块内的代码执行过程中...

    C# 捕获C/C++异常的例子

    C# 提供了一套强大的异常处理机制,它基于`try-catch`块来捕获和处理运行时错误。然而,C++的异常处理机制与C#不同,它使用`throw`和`catch`关键字,以及`try`块来抛出和捕获异常。当C#代码调用C++动态链接库(DLL)...

    c#已投入使用的排队叫号系统.zip

    C#的`try-catch`语句可以捕获和处理可能出现的异常,保证系统的稳定性。 最后,系统可能还集成了通知机制,如声音播放、LED显示屏控制或短信通知。C#可以调用操作系统API或者第三方库来实现这些功能。例如,通过...

    C# 事务处理机制

    在IT行业中,尤其是在数据库操作和系统开发中,事务处理机制起着至关重要的作用。本文将深入探讨C#中如何实现事务处理,特别是在处理与数据库交互的场景下,如北风数据库(Northwind Database)的Orders和Order ...

    c#的系统学习

    5. 异常处理:了解try-catch-finally语句,用于捕获和处理运行时错误。 三、高级C#特性 1. Lambda表达式与LINQ:Lambda表达式简化了匿名函数的写法,而LINQ提供了查询数据的强大工具,可用于数据库、XML和集合的...

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

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

    C#文字处理软件及源码!!!

    7. **调试与优化**:源码通常包含了错误处理和性能优化的代码,例如使用try-catch块处理可能出现的异常,或者使用适当的数据结构和算法提高程序效率。通过查看这部分代码,可以学习到如何在实践中进行问题排查和性能...

    图书馆管理系统(C#/.net)

    通过使用C#的try-catch语句,可以捕获并处理运行时可能出现的错误,保证系统稳定运行。同时,通过log4net等日志库记录系统操作,便于问题排查和性能优化。 最后,为了提高用户体验,系统还可以集成自动化测试和性能...

    基于C#的工资管理系统

    C#提供了try-catch语句来捕获和处理异常,同时,日志记录机制可以帮助开发者追踪和分析程序运行中的问题。 最后,系统的测试和调试也是必不可少的环节。C#支持单元测试,通过 NUnit 或 Microsoft's MSTest 等框架,...

Global site tag (gtag.js) - Google Analytics