1

这个问题是先前提出的问题的后续问题。

我写了一个看起来像这样的简单程序。

string s;
do
{
  using (SqlConnection conn = new SqlConnection("POOLEDCONN"))
  {
    using (SqlCommand cmd = new SqlCommand("", conn))
    {
        s = (string) cmd.ExecuteScalar();
        Code2IncrementPerfomanceCounter
    }
  }    
} while (!string.IsNullOrEmpty(s))

该查询返回一个字符串(nvarchar(max),当前最大大小为 9k),SQL Server 和 .NET 之间存在很多延迟。SQL Profiler 说查询的持续时间为 0 毫秒,所以我认为它不是数据库。网络在不到 1 毫秒的时间内做出响应,因此它不应该是网络。

如果我在我们的测试服务器(VMWare,SQL 未虚拟化)上运行此代码,则每秒最多会有 600 个循环。该应用程序消耗的 CPU 不超过 5%。为什么速度不快?我必须使用流式传输从 SQL 或其他方式获取数据吗?

提前感谢

4

3 回答 3

1

每秒 600 次调用是每 1.7 毫秒一次调用。如果您的延迟为 1 毫秒,并且 Sql Server 增加了一点,这似乎是一个合理的结果?

于 2009-08-17T10:32:25.240 回答
0

打开和关闭 SQL 连接的成本很高。你可以只做一次吗?

于 2009-08-17T15:00:18.190 回答
0

我有三个不同的事情你需要看:

  1. 您的 Web 服务器是使用 TCP/IP 连接到数据库服务器还是使用不同的协议?
  2. 运行 dtoNet 进程的机器上的网络有多忙?
  3. 如果删除 SQL 调用并仅保留性能计数器日志记录,性能是否会超过 600 个进程/秒?
于 2009-08-17T14:49:24.510 回答