首页 > 解决方案 > C# UdpClient ReceiveAsync() 性能问题

问题描述

我正在对 Xamrin Forms C# 应用程序中的性能问题进行故障排除。我找到了一个可以显着提高性能的修复程序,但不完全了解根本原因。我想确定我的修复是最好的解决方案。

原始代码是这样的(我已经删除了所有用于处理收到的包的代码):

public void Start()
{
    Task.Factory.StartNew(RunReceiveTask, TaskCreationOptions.LongRunning);
}

private async void RunReceiveTask()
{
    while (true)
    {
        UdpReceiveResult result = await udpClient.ReceiveAsync();
    }
}

为了在接收大量 UDP 数据包时提高性能,在 RunReceiveTask(...) 函数中进行了以下更改:


private void RunReceiveTask()
{
    while (true)
    {
        IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
        var receivedBytes = m_udpClient.Receive(ref remoteEndPoint);
    }
}

基本上,更改涉及使用 UdpClient.Receive(...) 而不是await UdpClient.ReceiveAsync(...)

据我所知,在这种情况下使用同步版本没有问题,但我真的很想了解为什么使用同步版本的性能要好得多!我还想知道是否还有其他方法可以在仍然使用异步版本的情况下实现相同的性能改进。

我一直试图弄清楚这一点,我最初的想法是,可能的解释是每次循环执行时都必须有很多开销调用等待......

那里有任何 C# 大师对我有任何想法或想法吗?:)

标签: c#androidxamarinxamarin.formsudp

解决方案


推荐阅读