看来我的代码需要很长时间才能打开连接,我运行了一些测试,其花费的时间太长了,以前它最多会加载 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/