我正在使用Advantage Database Server v10和相應的ADO.NET提供程序。我發現AdsConnection.Close
在執行INSERT/UPDATE
查詢後需要很長時間。Advantage數據庫服務器插入/更新查詢性能問題
例如此示例
class Program
{
static void Main(string[] args)
{
var openTimer = new Stopwatch();
var closeTimer = new Stopwatch();
var executeTimer = new Stopwatch();
for (int ix = 0; ix < 100; ix++)
{
openTimer.Start();
using (var cnn = new AdsConnection(
@"data source=...; ServerType=remote; user id=admin; password=..."))
{
cnn.Open();
openTimer.Stop();
executeTimer.Start();
using (var cmd = cnn.CreateCommand())
{
cmd.CommandText = "SELECT MAX(colUGId) FROM tblUserGroup";
var id = (int)cmd.ExecuteScalar() + 1;
cmd.CommandText = "INSERT INTO tblUserGroup (colUGId, colName, colDesc) VALUES (:id, :name, :desc)";
cmd.Parameters.Add("id", id);
cmd.Parameters.Add("name", "Name " + id);
cmd.Parameters.Add("desc", "Description " + id);
cmd.ExecuteNonQuery();
}
executeTimer.Stop();
closeTimer.Start();
}
closeTimer.Stop();
}
Console.WriteLine("Open: {0}; Execute: {1}; Close: {2}", openTimer.Elapsed, executeTimer.Elapsed, closeTimer.Elapsed);
}
}
輸出:
Open: 00:00:00.2361612; Execute: 00:00:15.3849932; Close: 00:00:05.4333431
這是非常有趣的,爲什麼在瑣碎的指標,沒有任何觸發器的簡單表格100個INSERT操作需要15秒。但最重要的問題是:爲什麼Close
需要這麼長時間?
任何想法?
UPDATE
只是試圖與SQL Server的同一。它運行在不同的工作站上,這比使用Advantage的工作站快一點。無論如何,我可以看到連接池可以工作(在SQL Server的情況下):
Open: 00:00:00.2279668; Execute: 00:00:00.0189551; Close: 00:00:00.0003487
您正在創建和處理AdsConnection類100次。爲什麼不打開一次,執行所有插入操作,然後關閉? –
@BradM我認爲,連接池是爲了節省我的工作而發明的 –
即。是正確的,連接池應該完全解決這個問題,另請參見:http://devzone.advantagedatabase.com/dz/webhelp/Advantage11.1/dotnet_advantage_net_data_provider_and_connection_pooling.htm –