c# - 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
解决方案
好的,问题是,它async/await
不像“通常”那样工作。阅读本文后,我更改了代码,它工作正常。Unity 中的 Async/Await 实际上与协程的工作方式大致相同。因此,等待异步方法至少要等待一帧。这就是 16ms 执行时间的来源(1s / 60FPS = 16ms)。因此,将下载代码包装在一个任务中,更改ReadyAsync
为Read
,并且只等待这个任务解决了这个问题。现在我有 61Mbps 和异步下载。
推荐阅读
- angular - 在 ionic 3 中访问 3 维数组
- swift - Swift Vapor:如何读取 JSON 文件?
- python - 当在函数内的 if 语句的条件中使用全局变量时,Python 会抛出 UnboundLocalError
- ios - 执行自动转场
- javascript - 如何通过按下选项卡按钮遍历 div 并显示其全部内容
- hyperledger-fabric - 在 Hyperledger Composer 中验证和处理交易提案请求
- ionic-framework - Ionic 3 popover on select,如何使用检查图标而不是圆圈?
- karate - 当任何一个步骤失败时,Karate -TestNG 停止执行
- ethereum - Solidity:在映射中检索结构数组的值
- python - Python3:请求模块头