C# 使用block和Dispose方法的性能比较
想想这两个片段: 方法1:使用C# 使用block和Dispose方法的性能比较,c#,performance,ado.net,try-catch,using-statement,C#,Performance,Ado.net,Try Catch,Using Statement,想想这两个片段: 方法1:使用使用语句 using(var connection = new SqlConnection()) using(var command = new SqlCommand(cmdText, connection)){ try{ connection.Open(); using(var reader = command.ExecuteReader( CommandBehavior.CloseConnectio
使用
语句
using(var connection = new SqlConnection())
using(var command = new SqlCommand(cmdText, connection)){
try{
connection.Open();
using(var reader = command.ExecuteReader(
CommandBehavior.CloseConnection | CommandBehavior.SingleResult){
while(reader.Read())
// read values
}
} catch (Exception ex) {
// log(ex);
}
}
方法2:使用try/finally
var connection = new SqlConnection();
var command = new SqlCommand(cmdText, connection);
SqlDataReader = null;
try{
var reader = command.ExecuteReader(
CommandBehavior.CloseConnection | CommandBehavior.SingleResult);
while(reader.Read())
// read values...
} catch (Exception ex) {
// log(ex);
} finally {
command.Dispose();
if (reader != null) {
if (!reader.IsClosed)
reader.Close();
reader.Dispose();
}
if (connection.State != ConnectionState.Closed)
connection.Close();
connection.Dispose();
}
我们都知道使用语句的将被编译成try/finally
块。那么,这样说是否正确:当应用程序被编译时,会有4个try
块
try { // for using SqlConnection
try { // for using SqlCommand
try { // my own try block
try { // for using SqlDataReader
} finally {
// dispose SqlDataReader
}
} catch {
// my own catch. can be used for log etc.
}
} finally {
// dispose SqlCommand
}
} finally {
// dispose SqlConnection
}
如果答案是肯定的,那不是性能问题吗?一般来说,我的意思是使用
块和尝试/最终
块之间是否有任何性能差异
try { // for using SqlConnection
try { // for using SqlCommand
try { // my own try block
try { // for using SqlDataReader
} finally {
// dispose SqlDataReader
}
} catch {
// my own catch. can be used for log etc.
}
} finally {
// dispose SqlCommand
}
} finally {
// dispose SqlConnection
}
更新:
从评论中,我不得不说:
1-重要的问题是,在彼此内部有多个try
块:是否存在性能问题
2-我必须关心代码,因为我负责代码,而不是查询。查询端有自己的开发人员,他们正在竭尽全力。所以,我也必须尽我最大的努力。所以,对我来说,关注毫秒是很重要的;)提前感谢。通常,当您听说try/catch
很慢时,都是关于异常处理的。所以,若发生异常,那个么它可能会很慢。但只要输入try
方法就不必担心了。特别是在扭曲SQL查询调用时
如果您想更多地了解.NET中的异常和性能,您可以找到许多文章阅读。例如:或
当然,使用
是更好的方法,因为它使代码更干净。您真的发现了性能问题吗?我不相信使用代码块会导致性能问题,并且更倾向于认为您的查询执行缓慢。4尝试/最后
-是。性能问题-没有。你为什么问这个问题?使用使用可以使代码干净。使用using
。如果您考虑的是该性能级别,则根本不应该使用托管代码。与其考虑使用对性能的影响,不如考虑查询的性能。您的查询可能会运行数小时,但您正在通过混淆代码来优化毫秒。强制性通常,当您在这里谈论try/catch时速度很慢,这都是关于异常处理的问题。我喜欢+1