我遇到了一个article说我正在使用我的sqlConnection:
using (SqlConnection sqlConnection = new SqlConnection(Config.getConnectionString()))
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(query, sqlConnection))
{
dataAdapter.Fill(dataSet);
}
}
提高了性能,因为它将对象放在方法的末尾。所以我一直在使用'使用'一段时间,在与其他开发人员聊天后,他们说多次创建和销毁实例不会真正提高性能。
如果我在所有dataAccess方法上使用'Using',那么对sqlserver和系统资源的性能影响是什么?由于连接多次连接和重新连接,sqlServer是否会受到更严重的打击?
答案 0 :(得分:12)
SqlConnection
已启用连接池。 Dispose()
只是更快地释放与池的连接。这意味着其他代码可以重新使用此连接,减少与SQL Server的连接,并减少建立物理连接的时间。
是的:它可以提高整体的性能。
备选方案:
Close()
连接,那么可能没什么区别Close()
连接,那么您可能会留下未使用的连接,直到有足够的内存压力触发GC和终结器。这可能意味着您需要与SQL服务器建立更多物理连接(痛苦),并且每次需要 new 底层连接时,都必须考虑建立实际数据库连接总体而言, - 将IDisposable
视为合同;作为.NET开发人员,您的作业注意IDisposable
资源,并在完成后主动Dispose()
,如果用法紧密,最好是using
范围(就像在这种情况下)。
答案 1 :(得分:3)
在大多数情况下,它对性能没有显着影响。
所有using()....构造确保SqlConnection
在完成其工作后被释放/处置。这就是全部 - 没有神奇的性能提升......
当然 - 创建和处理对象确实会花费一些性能 - 或者是这样,或者你不必要地将对象保留在内存中并且与SQL Server的连接打开的时间比需要的时间长得多。
我会投票在100%的时间内使用using() {...}
方法 - 它更干净,更安全,它只是更好的编程习惯。你可能采取的“打击”性能微乎其微,不值得麻烦。
马克
答案 2 :(得分:0)
它提高了仅的性能,因为在处理完连接实例后,池中的物理连接可以被另一个线程重用。如果你保持打开状态,那么另一个试图打开连接的线程会向池中添加一个新的物理连接。
答案 3 :(得分:0)
ADO.NET具有连接池等功能,因此如果您密集打开连接,很可能不会处理连接,只返回池中。
答案 4 :(得分:0)
如果您在彼此之后进行多个数据库操作,则应使用相同的连接,而不是为每个连接创建一个连接。否则,您应该尽快关闭连接,以便将其返回到连接池并可以重复使用。
您应始终使用using
块进行连接,以确保它们已正确关闭。如果您无法关闭连接对象,它将保留在内存中,直到垃圾收集器将其删除,从而占用数据库连接。这意味着下一个opreation不能重用池中的连接,但它必须建立一个全新的连接,这需要更长的时间。
答案 5 :(得分:0)
性能有所改善。
如果您使用 using
例如:
using (SqlConnection sqlConnection = new SqlConnection("ConnectionString"))
{
}
编译器自动添加try和finally。