gpt4 book ai didi

c# - 跨多个方法使用 SQLConnection ('using' 关键字是或否)

转载 作者:行者123 更新时间:2023-11-30 15:35:39 26 4
gpt4 key购买 nike

我想在类中的不同方法中重复使用相同的 SQLConnection。我现在正在做的(仅测试)是在构造函数中创建和打开连接:

SQLConnection Connection;

Constructor(string connection_string)
{
this.Connection = new SqlConnection(connection_string);
this.Connection.Open();
}

然后我在方法中使用“this.Connection”,最后在不再需要对象时使用 this.Connection.Close() 和 Dispose()。据我所知,像这样在每个方法中使用“using”会更干净(构造函数只会设置 connection_string):

using (SqlConnection connection = new SqlConnection(connection_string)) {
connection.Open(); ...
}

由于连接池,实际上只使用了一个连接,尽管上面的“使用”行被放置在多个方法中(例如,当它们一个接一个地被调用时),对吗?但是,这不会创建许多只需要一个的 SQLConnection 实例吗?例如:

MyClass obj(some_string);
obj.Method1(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method2(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method3(); // calls 'using SqlConnection connection = new SqlConnection'

那么共享 SQLConnection 的正确、最佳方式是什么?

最佳答案

你所有的陈述都是正确的。但是,您遗漏了一个重点:在 .NET 中创建大量类型的实例不一定是坏事!

  • 不应在构造函数中创建单个连接实例
  • 应该在需要时在本地创建连接
  • 最佳实践在创建一次性对象时使用using范例
  • 应该养成在 try...finall block 中对一次性对象调用 Dispose 的习惯(如果不使用 using)-如果您的特定场景不适合使用 usings;例如使用异步方法)
  • 最后,您不应保持 SQL 连接打开的时间超过您需要的时间。同样,只需利用 SQL Server 的 ADO.NET 提供程序中的连接池

现在,创建大量 Connection 类型的实例不是问题的原因是因为在 .NET CLR 中创建对象是优化的(快速内存分配和对象实例化)并且相对轻松(无需担心释放多亏了垃圾收集的内存)。在 ADO.NET 提供程序的情况下,您还可以享受连接池的好处,所以实际上,您不应该担心管理这种类型的实例数量。

很明显,在其他情况下(例如重/大对象)创建大量对象会对内存压力和性能产生影响。因此,请始终尽可能地评估情况..

关于c# - 跨多个方法使用 SQLConnection ('using' 关键字是或否),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com