有一堆压缩数据块必须异步放气 – 不会阻塞或减慢任何形状或形式的主线程.
解压缩后,主线程将使用解压缩的块.
目前我这样做:
foreach (var chunkPair in compressedChunkData) { var task = Task.Factory.StartNew<Chunk>(() => { var compressedBytes = Convert.FromBase64String(chunkPair.Value); var chunk = Decompress(compressedBytes); return chunk; }).ContinueWith((finishedTask) => { var chunk = finishedTask.Result; TaskFinishActions.Enqueue(() => { chunk.PostSerialize(); document.Chunks.Add(chunkPair.Key,chunk); }); }); } // By the time we get here 20ms has passed!!!
问题是,这似乎劫持了主线程正在运行的核心,这会影响性能.
有没有办法让TaskFactory只在主线程被阻止的那些短暂时刻内,每个核心的线程和上下文切换远离mainthread?
编辑:foreach循环不是代码中唯一变慢的部分,只要有大量的解压缩任务在运行,mainthread就会显着减慢.
EDIT2:解压缩的新数据一直到达,循环不运行一次:
>假设您有250个物品首先到达compressedChunkData
>下一帧你有10个项目,接下来的12个,接下来的0个,接下来的2个等等.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。