我正在使用Advantage Database Server v10和相应的 ADO.NET 提供程序。我发现执行查询AdsConnection.Close
后需要花费大量时间。INSERT/UPDATE
例如这个样本
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
需要这么长时间?
有任何想法吗?
更新
刚刚对 SQL Server 进行了同样的尝试。它在不同的工作站上运行,这比使用 Advantage 的工作站要快一些。无论如何,我可以看到连接池运行良好(在 SQL Server 的情况下):
Open: 00:00:00.2279668; Execute: 00:00:00.0189551; Close: 00:00:00.0003487