发布时间:2023-04-24 17:30
为了写出好的代码,我们常常需要在代码中加入try、catch、finally,但也有人担心添加太多的异常处理,会影响代码执行性能,那么添加了这些异常捕获代码后,究竟对代码性能影响有多大,以及出现异常后,执行性能影响又有多大?
为了能充分比较尽可能多的情况,我设计了5种情况的进行试验,除有异常抛出的代码外,这些代码的执行量基本差不多,传递的参数都是0xFFFFFF,试验调用的函数Acc(不做更多事情,仅为耗费一点CPU足以)如下:
private int Acc(int times)
{
times += 1;
return times;
}
private void TestTryCatchNone(int times)
{
for (int i = 0; i < times; i++)
{
Acc(i);
}
}
private void TestTryCatchOutFor(int times)
{
try
{
for (int i = 0; i < times; i++)
{
Acc(i);
}
}
catch (Exception) { }
}
private void TestTryCatchInFor(int times)
{
for (int i = 0; i < times; i++)
{
try
{
Acc(i);
}
catch (Exception) { }
}
}
private void TestTryCatchLong(int times)
{
times /= 0xF;
try
{
int offset = 0;
for (int i = offset; i < times; i++)
Acc(i);
offset = 1;
times++;
for (int i = offset; i < times; i++)
Acc(i);
//中间省略部分代码,总共有16次类似的代码,抵消times/0xF减少的执行量
//......
offset = 15;
times++;
for (int i = offset; i < times; i++)
Acc(i);
}
catch (Exception) { }
}
int ht = times / 100;
for (int i = 0; i < times; i++)
{
if ((i % ht) == 0)
{
try
{
throw new Exception("error");
}
catch (Exception) { }
}
Acc(i);
}
给这些函数传递参数都是0xFFFFFF,下面是某次我计算机上得出的时间(单位:毫秒):
无 | 粗粒度 | 细粒度 | 长代码 | 出异常 |
---|---|---|---|---|
57.81 | 57.84 | 59.9 | 59.87 | 151.52 |
可以看出:无论是否使用try、catch,粒度如何,代码长短,对性能的影响都不明显,反而是代码中出现异常后需要耗费的时间多,因此:我们应该在代码中大胆的使用try、catch,在需要频繁调用的函数中,如果有可能尽量避免抛出异常。
不会React hooks怎么办,试一试读Ahooks源码吧~
Spring Boot 整合RocketMq实现消息过滤功能
解决:error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
matlab两个三维曲面怎么相交,由散点画出的两个三维曲面,有办法求出交线吗
【用pandas_alive几行代码绘制竞赛动图】二、专栏学习说明(配置好的venv虚拟环境+拿来即用测试代码+测试数据集+参数api解析)
kalman滤波基础及matlab仿真_多传感器信息融合算法设计及仿真——信息融合算法分析...