C# 偶尔WCF 5秒响应峰值

C# 偶尔WCF 5秒响应峰值,c#,wcf,C#,Wcf,我们正在开发一个客户机-服务器系统,在该系统中,客户机连接到服务并从缓冲区获取图像。该请求在NetCPBinding上以25赫兹(每秒25个请求)的频率运行。发送的图像数据包含图像缓冲区(字节[])和一些关于图像的元数据 我们所经历的是,服务器有时会在5秒钟(5020到5050毫秒)内不响应,我们无法找出原因 在客户机上运行svc日志记录,我们可以看到以下内容 Activity Boundary Suspend 10:00:00:000 Activ

我们正在开发一个客户机-服务器系统,在该系统中,客户机连接到服务并从缓冲区获取图像。该请求在NetCPBinding上以25赫兹(每秒25个请求)的频率运行。发送的图像数据包含图像缓冲区(字节[])和一些关于图像的元数据

我们所经历的是,服务器有时会在5秒钟(5020到5050毫秒)内不响应,我们无法找出原因

在客户机上运行svc日志记录,我们可以看到以下内容

Activity Boundary                   Suspend       10:00:00:000
Activity Boundary                   Resume        10:00:00:003
Received a message over a channel   Information   10:00:05:017
将服务器作为托管WCF服务和非托管WWS服务运行时都会发生这种情况

它可以每100000个请求发生一次,每晚发生一次,或者以看似随机的间隔每分钟发生几次


有人知道这个问题的原因吗?

我们在Microsoft客户支持数据库中找到了解决方案

5秒延迟是由于SWS(安全窗口)的触发造成的 (综合征)回避计时器。SWS计时器计划发送 小于1毫秒的剩余数据(最大段大小,1460 字节),并且接收器应该发送一个ACK通知 增加了接收窗口并指示剩余的数据字节 可以发送。但是,如果接收器在可能的情况下发送ACK 在5秒内准备好足够的缓冲区,SWS计时器无法 恢复由于竞赛条件导致的5秒延迟状态


此问题仅在使用localhost或127.0.0.1时发生。在不同的机器上运行服务和客户端时不会出现延迟。

对于随机性能差距,我的第一个怀疑是垃圾收集器。您可以使用GC.Count(n)获取每一代的当前计数,n=0、1或2。定期收集计数,并跨性能峰值进行比较。如果在作为非托管WWS运行时发生这种情况,是否意味着它可能与C#和WCF无关?我会先看一下windows perf mon,看看在那个时间点还会发生什么。我很好奇,为什么你的
100.000
如此精确?@Inuyasha我是挪威人,我们使用,而且。与英语中的用法相反。所以我们会写10万,而不是10万。00@Inuyasha因为我写了十万,不是百点三乘零