我有一个处理一些查询的方法 A()。此方法从左括号到返回语句之前的时间为 +/-70 毫秒。其中 50% 来自打开连接,大约 20% 来自实际查询,5-10% 用于一些内存访问,其余的(可能)用于处理连接、命令和读取器。
尽管用于处理连接的这一大块时间已经够烦人了,但更困扰我的是当我从方法 B() 调用 A() 时:
B()
{
var timer = Stopwatch.Startnew()
A();
timer.Stop(); // elapsed: +/- 250ms
Debugger.Break();
}
又增加了 180 毫秒的延迟,我似乎不知道为什么。我已经尝试过让 A return null ,这没有任何改变。
唯一的磁盘 I/O 和网络发生在 A 中。我认为从磁盘和网络到本地内存的传输应该发生在 A 中,因此从 B 对 A 的调用不应受此影响,但显然这不是案子?这是我在这里遇到的网络延迟吗?如果是这样,那么为什么当我让 B 返回 null 时也会发生这种情况?
我暂时没有其他解释...
- 一切都驻留在同一个程序集中,
- 没有附加调试器的测量没有任何改变,
- 返回 'null' 立即显示 0 毫秒,返回 null 而不是正常的返回值没有任何改变(但强制执行与延迟有关的想法)。
A大致实现如下,就像访问数据库的任何简单方法一样。它是人为的,但显示了基本思想和流程:
A()
{
var totalTimer = Stopwatch.StartNew();
var stuff = new Stuffholder();
using(connection)
{
using(command)
{
using(reader)
{
// fill 'stuff'
}
}
}
totalTimer.Stop(); // elapsed: +/- 70ms
return stuff;
}
有任何想法吗?