c# Close()或using/Dispose()经常使用SQLite对象
本文关键字:常使用 SQLite Dispose 对象 using Close | 更新日期: 2023-09-27 18:09:12
有时我看到人们喜欢在使用后处理任何东西,而不管它们使用的频率如何(可能与SQLite问题无关,但我现在正在处理SQLite,我很困惑)——或者也许我错了。这给我造成了很大的困惑。
例如(引自别处):
using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
con.Open();
// ...
} // also closes the connection
我的问题是,我是否应该将SQLiteConnection
和SQLiteCommand
对象存储在字段中,并使用.Open()
, .Close()
方法来处理数据库连接,而不处理它们,直到应用程序终止—或者将它们处理到垃圾收集中,就像在我看来这不是一个真正优雅的想法?
编辑:如果有人说处置,那为什么?我需要更好的答案,我需要真正的原因,而不是因为池化之类的。我需要知道除了容易出现的人为错误之外,还可能出现哪些问题,并提供一个示例,或者可能提供到示例的链接。
例如class字段:
private static SQLiteConnection sQLiteConnection; /// <summary>SQLiteConnection.</summary>
public static SQLiteConnection SQLiteConnection { get { return sQLiteConnection; } }
private static SQLiteCommand sQLiteCommand; /// <summary>SQLiteCommand.</summary>
public static SQLiteCommand SQLiteCommand { get { return sQLiteCommand; } }
其中私有字段是用私有方法初始化的,并且对象将被重用而不丢弃它们;因此使用只读属性。
编辑2:为了更清楚地澄清,你们误读了吗?我说的是"重用"。这意味着创建了一个,并存储在字段的某个地方以供重用。我将它存储在静态类的静态字段中,以便在应用程序关闭之前重用。告诉我,为什么要我处理掉?为什么,我,必须,处置,它?如果,我,是,"重用",它?为什么?
连接由。net池化,因此创建它们通常不是一个昂贵的操作。使用"标准"方法通常比试图跟踪连接是否打开或关闭等要干净得多。
除非您有可测量的连接问题,否则我将坚持惯用的方法,即创建它们,使用它们,并处理它们。