Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TCPIP套接字侦听器性能问题_C#_Asynchronous_Tcp - Fatal编程技术网

C# TCPIP套接字侦听器性能问题

C# TCPIP套接字侦听器性能问题,c#,asynchronous,tcp,C#,Asynchronous,Tcp,我有一个相当简单的windows服务,它实现了一个C#TCPIP套接字侦听器服务。该服务是一个专有但简单的协议。即使在重载下也能准确可靠地工作。然而,性能不足以满足其需要,我一直在努力解决这一问题 我不知道这个建筑的正式名称。但它是基本的异步实现(IAsyncResult状态对象、AcceptCallback()、ReadCallback()等) 这是基本的性能问题:作为请求响应的一部分,服务必须调用远程服务(由某个独立的服务提供商操作)。通常,对此操作的响应需要(大约)1秒。但是,如果我加载2

我有一个相当简单的windows服务,它实现了一个C#TCPIP套接字侦听器服务。该服务是一个专有但简单的协议。即使在重载下也能准确可靠地工作。然而,性能不足以满足其需要,我一直在努力解决这一问题

我不知道这个建筑的正式名称。但它是基本的异步实现(IAsyncResult状态对象、AcceptCallback()、ReadCallback()等)

这是基本的性能问题:作为请求响应的一部分,服务必须调用远程服务(由某个独立的服务提供商操作)。通常,对此操作的响应需要(大约)1秒。但是,如果我加载20个测试客户机(作为来自多台机器的独立使用者运行),那么来自远程服务的1秒响应将延长到5秒或更长时间。我已经使用跟踪来确认这五秒钟的时间都在“执行这些远程事务的代码范围内”。跟踪还确认服务器正在按预期并发处理其请求,而不是将它们堆积起来

这就是说,我已经做了独立测试,证明远程服务可以在1秒的时间内轻松处理其内容,而不受负载的影响(该服务由一家大型知名公司运营,该公司知道它在做什么,并为无数组织提供服务——我相信这不是他们的问题)。我改变了我的负载测试,直接执行这个I/O,而不是使用服务,它实现了一秒钟的循环

最后,作为测试,我在我的服务中实现了多个侦听器,这些侦听器侦听不同的端口,并让我的load tester客户端在这些端口之间分发它们的请求。这样做提高了与端口数量相关的性能(两个侦听器==大约2倍的性能)

现在,我知道在多个端口上侦听不是正确的解决方案,也不应该造成影响。但这确实告诉我,我的实现中存在一些缺陷,干扰了回收侦听器的能力。或者,它表明远程服务的驱动程序缺少周期,无法方便地响应(尽管我倾向于不相信这种情况)

吞吐量要求对我来说似乎并不高——我们每秒只需要处理大约两个传入请求。我们平均只需要在大约两秒钟内做出反应。但5到7秒的反应实际上让我们的消费者失望(这本身很奇怪,但我们无法控制)

我已将Listener.MaxConnections设置为2500。但将这个数字设为5000或20并不影响这个问题

我希望得到一些关于如何解决这个问题的建议。我怀疑我在错误的上下文中执行了某些业务层代码。但我没看到


关于,

你在用什么运行这个?非服务器Windows对您可能遇到的半开放TCP连接的数量有一个默认限制,如果我没记错的话,这个限制是10。这一点很好。但是,这是在许可服务器2008 R2实例上运行的。这是一个VMWARE实例,我有点担心。但是虚拟机监控程序硬件的功能足够强大,所以我认为还可以。哦,日志记录(排队以避免造成其自身的影响)显示,我们通常有与测试客户端一样多的“进程中”连接,目前有20个。您设置了Socket.NoDelay属性吗?没有。这是我不知道的。我试试看。