Exception引起的性能问题
先show一下两段代码,两段代码都能比较好的实现业务逻辑,但是在高并发下,如果传入的参数为空,那么两段代码的性能表现完全不一样。
private static string Get(string filter)
{
if (string.IsNullOrEmpty(filter))
return "Error";
else
return "OK";
}
private static string GetData(string filter)
{
if (string.IsNullOrEmpty(filter))
throw new ArgumentException();
else
return "OK";
}
下面是两个方法各循环1000次代码和结果:
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
Get(string.Empty);
}
sw.Stop();
Console.WriteLine("Loop 1000 Get Method :" + sw.ElapsedMilliseconds);sw.Start();
for (int i = 0; i < 1000; i++)
{
try
{
GetData(string.Empty);
}
catch
{ }
}
sw.Stop();
Console.WriteLine("Loop 1000 GetData Method :" + sw.ElapsedMilliseconds);Console.ReadLine();
}
通过数据来看,性能差异还是非常非常大的。“不要用异常做逻辑判断”,写代码时要时刻谨记这条原则,否则一不小心就挖坑了。
最新文章
- explode,split,preg_split性能比较
- VBA 操作数字
- java与mysql连接
- Linux强化论:15步打造一个安全的Linux服务器
- 人人网的账号登录及api操作
- Unknow Unknow
- 【号外号外:微软收购 .NET 的开源实现 Xamarin 项目的公司】
- Angular4.0.0正式版发布
- 《HelloGitHub》第12期
- JavaScript笔记之第五天
- python---哈希算法实现
- Linux: yum配置说明
- 修改docker0默认IP地址
- MongoDB GridFS 存储文件
- VueJs(10)---vue-router(动态路由,嵌套式路由,编程式路由)
- python简说(二十九)线程,进程
- std::cout <;<; char + int
- 十、 持久层框架(MyBatis)
- ngx_http_stub_status_module
- html , body , margin , overflow 之大乱战
热门文章
- 爬取文件时,对已经操作过的URL进行过滤
- python no module named builtins
- C++11 中的function和bind、lambda用法
- Android Studio 修改包名最便捷做法
- C#学习-类的成员
- [转] 浅析JavaScript设计模式——发布-订阅/观察者模式
- Socket.Io+HttpWebRequest 请求Api
- Angularjs 学习笔记-2017-02-05-初识Angular及app、model、controller、repeat指令和fileter、orderBy
- luogu 1471
- Codeforces 348D Turtles LGV