我继承了一个使用套接字的 .net 2.0 客户端应用程序。服务器在 iSeries 上运行。我的计算机尝试使用客户端应用程序但遇到延迟。在遇到“滞后”的计算机上,我确定 Socket.Poll 方法花费的时间更长。
(我认为)我是这样知道的。
MyApp.WriteLogEntry("CS: START check for readable socket");
start = DateTime.Now;
readable = ControllerSocket.Poll(500, SelectMode.SelectRead);
end = DateTime.Now;
MyApp.WriteLogEntry("CS: END check for readable socket");
elapsed = end.Subtract(start);
MyApp.WriteLogEntry("Elapsed TotalMilliseconds = " + elapsed.TotalMilliseconds.ToString());
从计算机登录,无延迟
10.04.22.994427|CS: START check for readable socket
10.04.22.997427|CS: END check for readable socket
10.04.22.997427|Elapsed TotalMilliseconds = 1.0001
从有延迟的计算机登录
10.03.30.729816|CS: START check for readable socket
10.03.30.745432|CS: END check for readable socket
10.03.30.745432|Elapsed TotalMilliseconds = 15.6152
两台电脑都是windows 7 64位。一台是磁盘上的新副本(无延迟),另一台计算机是公司映像(延迟)。两台计算机都是千兆以太网。
我已禁用两者上的防火墙,并且它们都运行 Symantec Endpoint 12,配置相同。我已将 SEP 全部删除并得到相同的结果
为什么延迟?注册表设置?忍者小魔怪?
编辑
切换到使用秒表类进行计时
MyApp.WriteLogEntry("CS: START check for readable socket");
stopwatch.Start();
readable = ControllerSocket.Poll(500, SelectMode.SelectRead);
stopwatch.Stop();
MyApp.WriteLogEntry("Elapsed TotalMilliseconds = " + stopwatch.Elapsed.ToString());
MyApp.WriteLogEntry("CS: END check for readable socket");
11.27.30.012079|CS: START check for readable socket
11.27.30.013079|Elapsed TotalMilliseconds = 00:00:00.0000696
11.27.30.013079|CS: END check for readable socket
11.28.30.518912|CS: START check for readable socket
11.28.30.534512|Elapsed TotalMilliseconds = 00:00:00.0148936
11.28.30.534512|CS: END check for readable socket
好读:http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/