我的C#程序通过多个套接字接收大量数据,看起来我有问题,Windows内核上的TCP缓存越来越重。
这可以通过从来自服务器的tcpdump的下列结果可以看出:
缓存网络流
18:02:18.963370 IP XXXX> yyyy.zzz: ack 10017011 win 0
您将使用哪种数据结构/策略来缓存读取数据以避免C#上的重载?
我目前正在为每个读取记录后调用的单独线程中的每个套接字使用一个委托,但这似乎是一个问题,因此我可能需要将其分成两个线程。
或者我应该看看在Windows端调整TCP参数?我正在使用Windows 7.
是否有任何有关内核优化的书籍?
我真的觉得程序变慢了,即使整个机器的负载是20-25%,而最高负载的核心的负载是50-60%。
与http://stackoverflow.com/questions/5234277/c-1-socket-client-continous-data/5234427非常相似。我会在你的情况下推荐相同的东西。 – 2011-03-08 20:46:23
是的 - 的确如此。我仍然感到惊讶的是,除了对手方的tcpdump之外,没有一个TCP堆栈重载的实际指标。即使应用程序本身在Windows中查看性能监视器时看起来很健康,它显然也是瓶颈。 – weismat 2011-03-09 05:09:20