有关C#中使用if else和try catch的问题及效率问题
本来if esle 是流程控制 try catch是异常处理,本身其实是没有可比性的,但是开发过程中有的人很容易混用,而且两者有的时候效果似乎一样,所以我还是用了个简单的测试来简单的比较下。
不多说,直接上代码:页面test.aspx.cs的代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using xiejun.Common; namespace xiejun.test
{
public partial class test : System.Web.UI.Page
{
protected string A = "";//比较try catch 和if else 效率问题
protected string sTimeStart = "";
protected string sTimeEnd = "";
protected void Page_Load(object sender, EventArgs e)
{
IfElse();
TryCatch();
} /// <summary>
/// if else 方法
/// </summary>
private void IfElse() {
int forCount = * ;
sTimeStart = DateTime.Now.ToString();
for (int i = ; i < forCount; i++)
{
if (!string.IsNullOrEmpty(Request.QueryString["id"]))
{
A = Request.QueryString["id"].ToString();
}
else {
A = "不存在参数id";
}
}
sTimeEnd = DateTime.Now.ToString();
CommonMethods.WriteTxt("开始时间:" + sTimeStart + "结束时间:" + sTimeEnd);
}
/// <summary>
/// try catch方法
/// </summary>
private void TryCatch() {
int forCount = * ;
sTimeStart = DateTime.Now.ToString();
for (int i = ; i < forCount; i++)
{
try
{
A = Request.QueryString["id"].ToString();
}
catch {
A = "不错在参数id";
}
}
sTimeEnd = DateTime.Now.ToString();
CommonMethods.WriteTxt("开始时间:" + sTimeStart + "结束时间:" + sTimeEnd);
}
}
}
对比
test.aspx?id=1运行结果
开始时间:2015/4/29 17:15:01结束时间:2015/4/29 17:15:02
开始时间:2015/4/29 17:15:02结束时间:2015/4/29 17:15:02
test.aspx运行结果
开始时间:2015/4/29 17:22:50结束时间:2015/4/29 17:22:51
开始时间:2015/4/29 17:22:51结束时间:2015/4/29 17:23:20
可以看到当运行正常的时候 try catch 和if else 运行300万次效率都在一秒之内,而存在异常的时候try catch所用时间是29秒,if else 只用了1秒钟处理,如果在已知存在的异常下 用try catch 效率足足比if else了将近30倍;
总结:
我们在能够预料到一些基本的异常的时候尽量代码处理 异常 如上 用if else ,只有在存在未知异常的时候 用try catch,在已知存在某些异常的情况下用try catch代替if else做流程控制 是非常不好的习惯,循环次数多的话,差异还是非常明显。
有关C#中使用if else和try catch的问题及效率问题的更多相关文章
- Java牛角尖【007】:Java中的Error能不能被Catch
Java牛角尖[007]:Java中的Error能不能被Catch 网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧 ...
- 比较C#中几种常见的复制字节数组方法的效率
在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffe ...
- T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)
本文出处: http://www.cnblogs.com/wy123/p/6743515.html T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出(try catch th ...
- NIO[读]、[写]在同一线程(单线程)中执行,让CPU使用率最大化,提高处理效率
前几天写过一篇文章,讨论重写服务后,用ab进行压力测试,发现使用NIO后没提高什么性能,只是CPU使用率提高了,内存占用降低了. 之前的NIO实现模式,主要参考(基于事件的NIO多线程服务器)http ...
- 比较C#中几种常见的复制字节数组方法的效率[转]
[原文链接] 在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadByte ...
- lua中,两种json和table互转方法的效率比较
lua中json和table的互转,是我们在平时开发过程中经常用到的.比如: 在用lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua自己的数据 ...
- Java中自增(++)和赋值(=)运算效率比较
前言 将一个int型数组x[]从初值0变成1.有两种做法: // 只考虑后自增 int length = x.length; for (int i = 0; i < length; i++) ...
- 关于取表中id最大值+1的select语句,哪种效率更高?
需求:取stock表中id最大值+1,作为下一个id值. 特殊情况:考虑到表中会没有值,max(id)会返回空,因此需要用case when进行判断. 实现一:select (case max(id) ...
- IO流中的字符输入输出流及try...catch处理流处理中的异常
使用字节流读取中文的问题 import java.io.FileInputStream; import java.io.IOException; /* 使用字节流读取中文文件 1个中文 GBK:占用两 ...
随机推荐
- js 定时器的使用。 setInterval()
我需要实现的功能是:点击发送按钮,会出现 “已发送60s后可点击重发”,并且,60s 这个数字是随时变化的,60,59,58,57....0,然后再次返回到 发送 按钮. 类似效果,可参考 360首 ...
- iOS - OC RunLoop 运行循环/消息循环
1.RunLoop 1)运行循环: 运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要. 同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结 ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- poj2780Linearity(多点共线)
链接 判断最多多少点在一条直线上, 可以枚举每一个点为坐标系的原点,其它点变成相应的位置,然后求得过原点及其点的斜率,排序找一下最多相同的. #include <iostream> #in ...
- (十一)C语言中内存堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...
- 转:strcpy实现的考察要点
strcpy函数的实现 已知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如考虑 ...
- opencl gauss filter优化(三)
1.根据前两次的最终结果: 使用普通buffer,Horizontal 5ms, Vertical 17 ms 使用image buffer:Horizontal 9.4ms, Vertical 6. ...
- iOS开发 画六边形(多边形)
- (void)drawRect:(CGRect)rect { UIBezierPath * path = [UIBezierPath bezierPath]; [path moveToPoint:C ...
- JSP action elements - JavaBean
语法 描述 jsp:include 在页面被请求的时候引入一个文件. jsp:useBean 寻找或者实例化一个JavaBean. jsp:setProperty 设置JavaBean的属性. jsp ...
- 小div在大div中垂直居中,以及div在页面垂直居中
<html> <head> <title>淘宝 2faner</title> <style type="text/css"&g ...