维护单个数据库打开整个Windows服务

时间:2013-03-07 09:21:09

标签: c# mysql

我最初创建了Mysql的下面的类

public MySqlWrapper()
        {
            lock(this)
            {
                try
                {
                    string connectionstring = System.Configuration.ConfigurationManager.AppSettings[""];
                    _dbconn = new MySqlConnection(connectionstring);
                    _dbconn.Open();
                }
                catch (Exception exception)
                {
                    throw;
                }
            }
        }

~MySqlWrapper()
        {
            this.Dispose();
        }

        private bool _disposed = false;
        public void Dispose()
        {
            if (!_disposed)
            {
                //lock (sync)
                {
                    _disposed = true;
                    if (_dbconn != null)
                    {
                        _dbconn.Dispose();
                        _dbconn = null;
                    }

                    GC.SuppressFinalize(this);
                }
            }
        }

并从客户端访问,如下所示

using (ISqlWrapper iauth = new MySqlWrapper())
                    {
                        doDeviceExists = iauth.DoDeviceExists("","");
                    }

但我得知道,出于性能原因,我应该维护一次数据库打开实例并维护整个服务并在服务停止时处理它。我已经修改如下,但由于连接对象被维护,类(mysqlwrapper)没有被处理,我相信当多个客户端访问它时,正在创建一个新实例。

以下是修改后的代码

private static MySqlConnection _connection;
        public static MySqlConnection Connection
        {
            get
            {
                if (_connection == null)
                {
                    _connection = new MySqlConnection(_connectionstring);
                    _connection.Open();
                }

                return _connection;
            }
        }

并在命令中使用此连接对象,如下所示

using (var sqlCommand = new MySqlCommand(commandtext, Connection))
                {

}

并且还修改了下面的dispose方法

_disposed = true;
                    if (Connection != null)
                    {
                        Connection.Dispose();
                        //Connection. = null;
                    }

                    GC.SuppressFinalize(this);

请建议我如何克服这个问题,以及实现打开单个数据库实例的最佳方法是什么。如果我使用sqlwrapper或完全删除它是否可以。

0 个答案:

没有答案