C#的SQLite内存泄漏?

C#的SQLite内存泄漏?,c#,sqlite,C#,Sqlite,我在C#中使用sqlite。为了在数据库变大时测试性能,我编写了一个程序来生成内存不足的随机数据。 我发现我已通过创建了一个新的IDbCommand实例 IDbCommand cmd = dbConnection.CreateCommand() ; 方法,这就是内存泄漏的地方。如果我打电话` cmd.Dispose();` 执行SQLCommand后,一切正常。 通常,不会有大量的操作,因此我不介意为每个操作创建新的命令实例所浪费的时间。但是如果内存不能被释放,那就是一个问题 调用cmd.D

我在C#中使用sqlite。为了在数据库变大时测试性能,我编写了一个程序来生成内存不足的随机数据。 我发现我已通过创建了一个新的IDbCommand实例

IDbCommand cmd = dbConnection.CreateCommand() ;
方法,这就是内存泄漏的地方。如果我打电话`

cmd.Dispose();`
执行SQLCommand后,一切正常。 通常,不会有大量的操作,因此我不介意为每个操作创建新的命令实例所浪费的时间。但是如果内存不能被释放,那就是一个问题


调用cmd.Dispose()是我的职责,还是它是sqlite net的一个bug?

最好是处理实现
IDisposable
的所有东西

您可以使用
using
语句执行以下操作:

using (IDbCommand cmd = dbConnection.CreateCommand())
{
    // Your code here
}

请注意,
cmd
超出了使用语句块的
范围。当执行超出该块时,
using
语句将处理您的
IDisposable
。它还可以在出现异常时处理所有内容。

为什么不使用准备好的参数化命令并在循环中使用它呢?即使我使用一个准备好的命令,我仍然必须为每个上层实例创建新的命令。我想知道是否有内存泄漏的风险。如果我有一个类有一个command instance的成员该怎么办?似乎连接也实现了IDisposable。哪里是处理这些物品的最佳地点?一般来说,你应该在处理完物品后立即进行处理。所以用完后就把它处理掉。不确定关于拥有
IDbCommand
类型的成员的问题。您只需正常声明它,并使用
语句将初始化包装在
中。当它超出范围时,它的所有资源都会被释放和处置,这意味着它不会引用您创建的命令。在Using块之后使用它但不再次初始化它将引发异常。例如,我有一个类有一个IDbCommand成员变量。为了提高效率,我在构造函数中准备了它,正如@Tarik所说的。当不再使用该类的实例时,我认为应该处理该命令。我应该实现IDisposable并释放该命令,还是可以在Finalize方法中释放它?很抱歉我的英语不好。请实现
IDisposable
,并在托管代码中处理您的对象。您还应该调用类析构函数中的
Dispose()
方法,唯一的区别是您将false作为参数传递。