一直以来都很好奇TryCatch捕获一个错误会对性能有多大的损耗,有的人说差异是倍数级的,有的人说差异不大,今天忽然心血来潮就自己写了个Demo测试,因为曾经自己写过一篇文章提到不要滥用TryCatch来捕获已知的错误,却没有用事例佐证过,当然结果也是如预期一般。
创新互联-专业网站定制、快速模板网站建设、高性价比威远网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式威远网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖威远地区。费用合理售后完善,十载实体公司更值得信赖。
- static void Main(string[] args)
- {
- int loopCount=100;
- List
strList = new List (); - for (int i = 0; i < loopCount; i++) {
- strList.Add("str" + i);
- }
- int intTemp = 0;
- Stopwatch sw2 = new Stopwatch();
- sw2.Start();
- foreach (string str in strList)
- {
- Console.WriteLine("不用TryCatch");
- int.TryParse(str, out intTemp);
- }
- sw2.Stop();
- Stopwatch sw = new Stopwatch();
- sw.Start();
- foreach (string str in strList)
- {
- try
- {
- Console.WriteLine("这是TryCatch");
- intTemp = Convert.ToInt32(str);
- }
- catch (Exception ex)
- {
- //异常不做处理
- }
- }
- sw.Stop();
- Console.WriteLine("循环次数" + loopCount + "不用TryCatch耗时:" + sw2.ElapsedMilliseconds);
- Console.WriteLine("循环次数" + loopCount + "这是TryCatch耗时:" + sw.ElapsedMilliseconds);
- Console.WriteLine("按回车键退出" );
- Console.ReadLine();
- }
为了直观地看到每一次转换是否进行了,所以在每一次转换前都输出一次是否用到TryCatch,当loopCount为100时运行结果如下:
而当把loopCount的值加大为10000时输出结果如下:
不同的运行环境下的耗时结果不一样,但是两者之间的耗时差距是很大的
当然了,这样的测试有点片面,但从测试数据我们足以得到一种信息——不要把可预知的异常放到TryCatch里面让系统捕获处理
忽然想到,我这个测试时在转换错误时的测试,那么程序如果不捕获到异常会怎么样呢,把代码改成如下
- for (int i = 0; i < loopCount; i++) {
- strList.Add( i.ToString());
- }
运行1000次时结果如下(运行环境不同会出现不同结果,我测试多次都是用TryParse比较耗时,大约多100-300)
而在运行10000次时结果如下:
为了验证是否因为TryParse和Convert之间有差异,将程序改动后运行1000次结果如下:
10000次运行结果如下:
多次运行发现结果基本相差不大,偶尔会出现不用TryCatch会耗时长很多,这个留待大牛去解释,但以上测试表明在不出现错误的情况下二者的性能损耗差不多,但在出现错误的情况下却相距甚大。
名称栏目:关于TryCatch捕获错误的简单性能测试
转载来于:http://www.mswzjz.cn/qtweb/news30/405730.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能