gpt4 book ai didi

c# - 高性能网络应用的最佳实践

转载 作者:可可西里 更新时间:2023-11-01 09:13:23 26 4
gpt4 key购买 nike

在测试我在 Windows 7 Ultimate x64 上编写的 UDP 多播服务器时,我遇到了一件非常奇怪的事情。在后台使用 foobar2000 播放音乐显着提高了 服务器的传输速率,但也导致了轻微的数据包丢失。关闭音乐会立即将传输速率降低到可接受的水平以下,但也会产生 0 丢包。 (我有一个客户端应用程序,它与服务器通信并报告未确认的数据包)

我知道 Vista(及更高版本)的节流行为使媒体和网络应用程序可以很好地协同播放,但我当然没想到播放音乐会提高网络性能,也没有想到关闭它会如此显着地降低网络性能。

从代码的角度来看,我可以在我的服务器应用程序中对此做些什么,以便无论是否在 Vista 及更高版本上播放音乐,它都能始终如一地执行?我当然希望避免必须通知我的所有客户如何调整他们的注册表以获得可接受的传输速率,并且还希望避免让他们简单地“播放音乐”以获得可接受的传输速率。在我看来,该应用程序应该“正常工作”。

我认为解决方案涉及进程优先级、MMCSS 或其他一些模糊的 Windows API 调用,以使其在此处执行正确的操作。

另外,很抱歉,创建可重现的测试用例是一项非常重要的工作。仅当物理 NIC 的驱动程序正在积极工作并且无法使用环回接口(interface)重现时,才会发生限制行为。需要客户端实现、服务器实现和用于测试的物理网络硬件。

最佳答案

您观察到的是媒体播放器将机器的时钟分辨率设置为 1 毫秒的副作用。

这只发生在播放期间

副作用是 - 您的应用程序具有更小的时间片,这会改进您的应用程序,因为您可能从您的应用程序中窃取了大量 CPU,并且时间片更长 - 持续时间更长。

要对其进行测试,您只需将应用中的计时器分辨率设置为 1 毫秒,然后在媒体播放的情况下比较性能。

应该与没有 clocres 设置但有媒体播放时一样。

关于c# - 高性能网络应用的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com