减少c#中的使用次数

本文关键字:减少 | 更新日期: 2023-09-27 18:01:24

我的问题可能很傻,也可能根本不是问题,但这就是问题所在。

我在ASP.net MVC项目中执行相当多的数据库操作,其中我每次都创建两个对象,即SqlConnectionSqlCommand

我在下面展示了一个例子

using (SqlConnection connection = new SqlConnection(connectionString))
{
  using (SqlCommand command = new SqlCommand("sRegisterUser", connection))
  {

我的问题是如何每次都减少这些对象的创建?如何全局创建

PS: sRegisterUser是一个存储过程,同样,其他方法使用不同的过程来获取不同的值作为参数。

请帮帮我。

感谢您的帮助。

减少c#中的使用次数

答案是,不要。您不希望共享这些对象,您正在适当地使用它们

你没有。你要么让对象存活,这很糟糕。或者你按你应该的方式处理它,目前就是这样。

那么,你为什么要用using呢?

由于using是处理Windows句柄所必需的。

您也可以这样写,这类似于使用using:

SqlConnection connection = new SqlConnection(connectionString);
connection.Close();
connection.Dispose();
当上面的代码抛出错误时,

using也会进行处理。使用using实际上是编写此代码的最短方法。

所以错误保存版本应该是:

SqlConnection connection;
try
{
    connection = new SqlConnection(connectionString);
    ...
    connection.Close();
}
finally
{
    connection.Dispose();
}

正如其他人已经说过的,你现在所做的没有错。ADO。. NET对象意味着被使用和处理。根据经验,您应该尽可能晚地创建它们,并且尽可能快地处置它们

话虽如此,我明白你在这里想做什么,我确实有一些你可能感兴趣的想法,可以让你的生活更轻松,同时保持良好的编程实践。

如果你想让代码更简洁,你可以链接using语句:

using (var cn = new SqlConnection(yourConnectionString))
using (var cmd = new SqlCommand(yourQuery, cn))
{
    // do stuff
}

IDE不会尝试缩进第二个块,使您更容易阅读。

你也可以为你的过程创建一个抽象层:

public static class Procedures
{
    public static void RegisterUser() // add whatever parameters you need
    {
        using (var cn = new SqlConnection(yourConnectionString))
        using (var cmd = new SqlCommand(yourQuery, cn))
        {
            // do stuff
        }
    }
}
从那时起,你可以简单地通过调用 来执行你的过程:
Procedures.RegisterUser();

另一种选择是引入工厂模式来获取对象。这本身不会减少它们的数量,但它可能有助于将它们全部设置好(即正确的连接字符串)。

你也可以创造性地将这两种模式结合起来。实现IDisposable的自定义类可以负责创建必要的ADO对象,打开连接,执行查询,关闭连接,并在对象本身被处置时处置任何需要处置的对象。