2

我们正在测试一些选项来解决 .Net 4.0 SqlClient 的性能问题(大量的 GC 和终结器等),并且正在考虑使用不同的 Sql 客户端实现 - Mono 浮现在脑海中。

1) 是否可以将 SqlClient 的 Mono 实现与 MS.Net 应用程序一起使用?如果是这样 - 怎么样?
2) Mono 实现是否“稳定”?最推荐哪个版本?
3)SqlCommand、QueryResults等的mono实现是否包含终结器?

谢谢!

4

1 回答 1

4

如果您看到这些影响 GC,则表明没有正确使用它们。其中,SqlDataReader首先没有终结器,所以我假设我们正在谈论SqlCommandand SqlConnection。这两个都继承自Component,并且在这两种情况下,Dispose()调用都会从 GC中取消注册它们 - 它是:

public void Dispose()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

所以:如果您将这些设置为 GC 中的终结器,请查看您是否正确处理了对象。最简单的方法是通过using语句。例如:

using(var conn = OpenSomeConnection())
using(var cmd = conn.CreateCommand()) {
    // TODO configure command

    using(var reader = cmd.ExecuteReader()) {
        // TODO consume data
    }
}
于 2013-05-20T07:03:49.130 回答