[英]MySQL connection taking too long?
看來我的代碼需要很長時間才能打開連接,我已經進行了一些測試,並且花費的時間太長了,以前它的最大加載時間為500ms。
時間達到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()
,第一個連接之后的所有連接都在20ms內完成,這比第一個連接要快得多。
Oracle的Connector / NET提供程序具有一個已知的錯誤#80030 ,該錯誤可使與服務器的第一次連接非常慢。
我建議切換到MySqlConnector ,它是OSS的替代品,可以修復此錯誤,總體上性能更高,並提供真正的異步I / O。
顯然,您的硬件與任何呼叫的性能都息息相關,因此呼叫需要花費多長時間是沒有意義的問題。
建立數據庫連接通常是一個緩慢的過程,這就是為什么連接池和連接重用是一種常見的技術。
進行概要分析(而不是秒表監視)可以使您更好地了解瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.