首页 > 解决方案 > Unity - 异步/等待太慢

问题描述

我正在从服务器下载纹理。在编辑器中运行代码需要几秒钟来下载它。但是当我构建它并运行 .exe 时,下载需要几分钟。有什么原因吗?任何构建选项?

HttpWebRequest request = WebRequest.CreateHttp(PATH);
WebResponse response = await request.GetResponseAsync();
Stream stream = response.GetResponseStream();

byte[] data = new byte[response.ContentLength];

int bytesRead = 0, count = (int)response.ContentLength;
while (bytesRead < count) {
    int read = await stream.ReadAsync(data, bytesRead, count - bytesRead);

    if (read <= 0)
        continue;

    bytesRead += read;
}

编辑:
问题正在等待。等待Stream.Read调用会Task.Factory.StartNew导致相同的行为。来自任务管理器以太网分析的值:

异步:编辑器:47Mbps;构建 4.4Mbps
同步:编辑器 = 构建:61Mbps

标签: c#unity3d

解决方案


好的,问题是,它async/await不像“通常”那样工作。阅读本文后我更改了代码,它工作正常。Unity 中的 Async/Await 实际上与协程的工作方式大致相同。因此,等待异步方法至少要等待一帧。这就是 16ms 执行时间的来源(1s / 60FPS = 16ms)。因此,将下载代码包装在一个任务中,更改ReadyAsyncRead,并且只等待这个任务解决了这个问题。现在我有 61Mbps 和异步下载。


推荐阅读