200 简单的代码评审,看看有什么问题
就看这样写有什么不好
C# code
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
object re = null;
try
{
re = dbCommand.ExecuteScalar();
watch.Stop();
}
catch (Exception e)
{
watch.Stop();
throw e;
}
finally
{
WriteSqlLog(sqlLog, watch.Elapsed.TotalSeconds);
}
------解决方案--------------------watch.Start();
------解决方案--------------------watch.Stop();可以放到finally里面,不过如果是为了精确得出TotalSeconds,貌似就应该这样。
dbCommand这个数据库连接后面还有用到吗,没用到要关闭。
------解决方案--------------------1.watch.start();
2.注释
3.对象回收
4.这段代码是在主程序中还是在自定义的方法里面,如果实在主程序中则throw e这个句子就不能用吧。
------解决方案--------------------
watch.Elapsed.TotalSeconds
这个单位有点大。
最好使用ms,如果你的操作有很长的有很短的,时间在10ms-10minutes的区间,你最好写个方法,自动转换单位。
比如
public string FormatCostTime(Stopwatch currentWatch){
long ms = currentWatch.Elapsed.TotalMilliseconds ;
if(10*1000*1000> ms && ms > 1000 * 1000)
{
return string.Format("{0}m",currentWatch.Elapsed.TotalMinutes);
}
else if(1000<ms && ms<=1000*1000)
{
return string.Format("{0}s",currentWatch.Elapsed.TotalSeconds);
}
else if(ms<=1000)
{
return string.Format("{0}ms",currentWatch.Elapsed.TotalMilliseconds );
}
else
{
return string.Format("{0}h",currentWatch.Elapsed.TotalHours);
}
}
------解决方案--------------------System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
object re = null;
try
{
watch.Start();
re = dbCommand.ExecuteScalar();
watch.Stop();
}
catch (Exception e)
{
watch.Stop();
throw e;
}
finally
{
WriteSqlLog(sqlLog, watch.ElapsedMilliseconds);
}
------解决方案--------------------
单单从代码,你的逻辑,有点过怪。
这个是关闭,watch.Stop(); 代码块是吗
可是你又在关闭的有执行:dbCommand.ExecuteScalar();
你的启动程序又做什么?
另外 throw的时候 自定义比较好。
------解决方案--------------------记录日志不要放到数据库访问中
据说io操作耗时间,会是数据库连接占用更长.
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
object re = null;
try
{
re = dbCommand.ExecuteScalar();
}
catch(SqlException e)
{
throw e;
}
catch (Exception e)
{
throw e;
}
finally
{
watch.Stop();
//WriteSqlLog(sqlLog, watch.Elapsed.TotalSeconds);数据库连接关闭了再记录日志.
}
------解决方案--------------------