问题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块.从而也影响了最终编译程序的大小.
分享到:
相关推荐
`catch`块用于捕获和处理`try`块中抛出的异常。每个`catch`块可以捕获特定类型的异常,或者捕获所有类型的异常。如果`catch`块的异常类型与`try`块中抛出的异常匹配,那么对应的`catch`块就会执行。 ```csharp ...
总结来说,C#中的Try-Catch语句确实会对程序性能产生一定影响,但这种影响通常很小,特别是在处理可能的错误和异常情况时,其带来的安全性提升远大于性能损失。在编写代码时,应根据具体情况权衡是否使用Try-Catch,...
Java、C#等许多编程语言提供了异常处理框架,其中“try-catch-finally”是常用的一种结构。下面我们将详细探讨这个主题。 1. **异常的概念** 异常是程序执行期间发生的非正常情况,它可能由用户输入错误、文件不...
3. **资源清理**:如果 `try` 块中使用了需要关闭的资源(如文件流),应使用 `finally` 块确保资源得到正确的释放。 4. **异常重新抛出**:在某些情况下,可能需要在捕获异常后进行一些处理,然后再重新抛出异常。...
总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。
在实际编程中,我们可能还需要使用THROW语句手动抛出异常,以及使用CATCH、FINALLY等语句来捕获和处理异常,或者在所有异常处理完成后执行必要的清理工作。 总结一下,易语言中的TRY异常处理机制提供了处理运行时...
在编程世界中,异常处理是确保程序稳定性和健壮性的重要机制。C#语言提供了强大的异常处理框架,其中`try...catch`语句块是最核心的部分。本篇将深入探讨`try...catch`在C#中的应用以及相关知识点。 异常...
首先,`try-catch`语句用于捕获和处理程序运行时可能出现的异常。在`try`块中,你编写可能会抛出异常的代码。如果这些代码引发异常,程序会立即跳转到相应的`catch`块,以便执行错误处理代码,而不是让程序崩溃。...
`try-catch` 结构作为异常处理的核心机制,在各种编程语言中广泛采用,如 Java、C# 和 JavaScript 等。本文将深入探讨 `try-catch` 的基本概念、语法结构及其应用场景。 #### 一、`try-catch` 的基本概念 `try-...
`try-catch-finally`语句块是C#中用于捕获和处理异常的关键结构。下面我们将详细解析这个语句块的用法,并通过实例来展示其功能。 1. `try`块: `try`块包含可能抛出异常的代码。当在`try`块内的代码执行过程中...
C# 提供了一套强大的异常处理机制,它基于`try-catch`块来捕获和处理运行时错误。然而,C++的异常处理机制与C#不同,它使用`throw`和`catch`关键字,以及`try`块来抛出和捕获异常。当C#代码调用C++动态链接库(DLL)...
C#的`try-catch`语句可以捕获和处理可能出现的异常,保证系统的稳定性。 最后,系统可能还集成了通知机制,如声音播放、LED显示屏控制或短信通知。C#可以调用操作系统API或者第三方库来实现这些功能。例如,通过...
在IT行业中,尤其是在数据库操作和系统开发中,事务处理机制起着至关重要的作用。本文将深入探讨C#中如何实现事务处理,特别是在处理与数据库交互的场景下,如北风数据库(Northwind Database)的Orders和Order ...
5. 异常处理:了解try-catch-finally语句,用于捕获和处理运行时错误。 三、高级C#特性 1. Lambda表达式与LINQ:Lambda表达式简化了匿名函数的写法,而LINQ提供了查询数据的强大工具,可用于数据库、XML和集合的...
C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 1、try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。 2、catch:程序通过异常处理程序捕获异常。catch ...
7. **调试与优化**:源码通常包含了错误处理和性能优化的代码,例如使用try-catch块处理可能出现的异常,或者使用适当的数据结构和算法提高程序效率。通过查看这部分代码,可以学习到如何在实践中进行问题排查和性能...
通过使用C#的try-catch语句,可以捕获并处理运行时可能出现的错误,保证系统稳定运行。同时,通过log4net等日志库记录系统操作,便于问题排查和性能优化。 最后,为了提高用户体验,系统还可以集成自动化测试和性能...
C#提供了try-catch语句来捕获和处理异常,同时,日志记录机制可以帮助开发者追踪和分析程序运行中的问题。 最后,系统的测试和调试也是必不可少的环节。C#支持单元测试,通过 NUnit 或 Microsoft's MSTest 等框架,...