c# - MySQL 连接时间太长?

标签 c# mysql .net database-performance

看来我的代码需要很长时间才能打开连接,我运行了一些测试,其花费的时间太长了,以前它最多会加载 500 毫秒。

时间峰值为 2 整秒,这是在 C# 中打开 MySQL 连接的正常行为,还是我的担忧是正确的?我用秒表判断这个时间,所以非常准确。

让我们对其进行基准测试...

Startup 1 took: 1777ms
Startup 2 took: 1817ms
Startup 3 took: 1796ms
Startup 4 took: 1673ms
Startup 5 took: 1905ms
Startup 6 took: 1716ms

这是瓶颈的开始......

public DatabaseConnection Connection => new DatabaseConnection(_connectionString);

public bool ConnectionWorks()
{
    try
    {
        using (Connection)
        {
        }

        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

对于对 DatabaseConnection 类的构造函数感兴趣的人,这里是。

public DatabaseConnection(string connectionString)
{
    _connection = new MySqlConnection(connectionString);
    _command = _connection.CreateCommand();

    OpenConnection();
}

OpenConnection()方法:

private void OpenConnection()
{
    if (_connection.State == ConnectionState.Open)
    {
        throw new InvalidOperationException("Connection already open.");
    }

    _connection.Open();
}

连接字符串:

var connectionString = new MySqlConnectionStringBuilder
{
    ConnectionLifeTime = 60 * 5,
    ConnectionTimeout = 30,
    Database = "testing",
    DefaultCommandTimeout = 30,
    Logging = false,
    MaximumPoolSize = 250,
    MinimumPoolSize = 10,
    Password = "********",
    Pooling = true,
    Port = 3306,
    Server = "127.0.0.1"
    UserID = "root"
};

我做了一些调试,可以看到瓶颈来自_connection.Open(),第一个连接之后的所有连接都在 20 毫秒内完成,这比第一个连接要快得多...

最佳答案

Oracle 的 Connector/NET 提供程序有一个 known bug #80030这可能会使与服务器的第一次连接非常慢。

我建议切换到 MySqlConnector ,一种修复此错误的 OSS 替代方案,总体性能更高,并提供真正的异步 I/O。

关于c# - MySQL 连接时间太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408380/

相关文章:

c# - 你如何找到这个月的最后一天?

mysql文件导入多行字符串

mysql - 根据 child 及其 child 的条件获取父数据

C#:Regasm 为我的 COM DLL 中的每个类生成注册表项?

c# - 如何在 System.Windows.Forms.WebBrowser 中调用自定义 Javascript?

c# - WPF:未调用 IValueConverter

c# - 当名称不以 [] 结尾时,MultipartFormDataContent 不会发布 StringContent 项目

c# - 在 C# 中,什么时候引用类型比值类型更有效?

具有有效时间间隔的mysql价格处理,限制加入

java - .net 中 AggregateException 的 java 等价物是什么?