就看这样写有什么不好 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);
}
object re = null;
try
{
re = dbCommand.ExecuteScalar();
watch.Stop();
}
catch (Exception e)
{
watch.Stop();
throw e;
}
finally
{
WriteSqlLog(sqlLog, watch.Elapsed.TotalSeconds);
}
解决方案 »
- GridControl控件怎么把gridView的前1列锁定,就是拖动横向滚动条时,第一列始终是不会隐藏的
- wpf,listbox请教。
- datagridview 加载 某张表时,由于数据量较大,想加个进度条显示进度!
- 我在vs 2008里面编辑代码的时候,Ctrl+E D然后代码的横向宽度锁定了,如何复原呢?
- 请教一个在DataGridView查找一条数据的问题!请照顾新手啊~
- Cstring在C#中怎样获得
- C# 怎样播放PCM格式的音频流?是音频流,而不是音频文件! 在线急求//
- 验证控件的问题,100分相送!UP有分!
- webservice、网页数据抓取问题
- 文件上传
- C# 关键字“this”在静态属性、静态方法或静态字段初始值设定项中无效
- 字符串操作
dbCommand这个数据库连接后面还有用到吗,没用到要关闭。
2.注释
3.对象回收
4.这段代码是在主程序中还是在自定义的方法里面,如果实在主程序中则throw e这个句子就不能用吧。
3:回收Stopwatch ?
4:我也认同在chtch中写 throw e 不好
最好使用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);
}}
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的时候 自定义比较好。
1. finally 不管怎么样都会执行 那么watch.Stop(); 可以写到finally
2.watch 没有start() 这个不是问题考察点
3. try catch throw 会改变堆栈,无法最终出错的是哪行. 这个在分析新疆日志是经常碰到的
4. 可能也不是问题的考察点 尽可能捕获自己能处理的异常 少用整个Exception
据说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);数据库连接关闭了再记录日志.
}
try catch throw 会改变堆栈这样写就没问题了
try
{}
catch(Exception e)
{
throw;
}
这才是关键,其它的诸如忘了 start 之类的,都是小问题,程序跑一边就会知道的。也可能是楼主忘记写了。
stop 放的位置虽说重复,但与楼主问题的关键不太贴切。
同意4,但是3说的不准确,throw e会向上层抛出异常,在上层逻辑中可以使用exp.InnerException.InnerException来逐层捕获内部异常,直接最底层就可以知道原凶了