本来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的问题及效率问题的更多相关文章

  1. Java牛角尖【007】:Java中的Error能不能被Catch

      Java牛角尖[007]:Java中的Error能不能被Catch 网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧 ...

  2. 比较C#中几种常见的复制字节数组方法的效率

    在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffe ...

  3. T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)

    本文出处: http://www.cnblogs.com/wy123/p/6743515.html T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出(try catch th ...

  4. NIO[读]、[写]在同一线程(单线程)中执行,让CPU使用率最大化,提高处理效率

    前几天写过一篇文章,讨论重写服务后,用ab进行压力测试,发现使用NIO后没提高什么性能,只是CPU使用率提高了,内存占用降低了. 之前的NIO实现模式,主要参考(基于事件的NIO多线程服务器)http ...

  5. 比较C#中几种常见的复制字节数组方法的效率[转]

    [原文链接] 在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadByte ...

  6. lua中,两种json和table互转方法的效率比较

    lua中json和table的互转,是我们在平时开发过程中经常用到的.比如: 在用lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua自己的数据 ...

  7. Java中自增(++)和赋值(=)运算效率比较

    前言   将一个int型数组x[]从初值0变成1.有两种做法: // 只考虑后自增 int length = x.length; for (int i = 0; i < length; i++) ...

  8. 关于取表中id最大值+1的select语句,哪种效率更高?

    需求:取stock表中id最大值+1,作为下一个id值. 特殊情况:考虑到表中会没有值,max(id)会返回空,因此需要用case when进行判断. 实现一:select (case max(id) ...

  9. IO流中的字符输入输出流及try...catch处理流处理中的异常

    使用字节流读取中文的问题 import java.io.FileInputStream; import java.io.IOException; /* 使用字节流读取中文文件 1个中文 GBK:占用两 ...

随机推荐

  1. yii2-获取配置选项的值

    Yii::$app->属性值 e.g:echo Yii::$app->id #输出basic config: $config = [ 'id' => 'basic', 'basePa ...

  2. ccc

    课本第291页第4题 #include<stdio.h> void main() { int n, m, i, k; int p_begin; ]; scanf("%d" ...

  3. 把excel中的数据导入到数据库

    import.php <?php header("Content-Type:text/html;charset=utf-8"); echo '<html> < ...

  4. BestCoder Valentine's Day Round

    昨晚在开赛前5分钟注册的,然后比赛刚开始就掉线我就不想说了(蹭网的下场……),只好用手机来看题和提交,代码用电脑打好再拉进手机的(是在傻傻地用手机打了一半后才想到的办法). 1001,也就是 hdu ...

  5. 对List里的对象元素进行排序

    public class Student { private int studentId; private String studentName; private int age; public St ...

  6. 转!!Java学习之自动装箱和自动拆箱源码分析

    自动装箱(boxing)和自动拆箱(unboxing)   首先了解下Java的四类八种基本数据类型   基本类型 占用空间(Byte) 表示范围 包装器类型 boolean 1/8 true|fal ...

  7. python语法笔记(六)

    1.序列的方法     python中序列包含列表list.元组tuple.字符串str. 可以用于序列(表.元组.字符串)的内建函数: len(s) 返回: 序列中包含元素的个数 min(s) 返回 ...

  8. ajax 动态获取json的例子

    1.前台脚本: //用于切换图片列表的ajax function changePhoto(title,hotelId){ $.ajax({ contentType: "application ...

  9. Controller简介

    Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分: 1.收集.验证请求参数并绑定到命令对象: 2.将命令对象交给业务对象,由业务对象处理并返回模型数 ...

  10. C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”

    将你的File.Create(fileName); //创建fileName路径的文本改为 1 2 3 using (FileStream fs = File.Create(fileName)){} ...