【问题标题】:WinJS web worker call vs call to WinRT C# component returning a promiseWinJS web worker 调用 vs 调用 WinRT C# 组件返回一个承诺
【发布时间】:2014-05-03 03:47:24
【问题描述】:

我正在开发一个 WinJS 游戏,其中部分逻辑在 C# WinRT 组件中实现,因为事实证明它更高效,更易于概念化和调试。该组件的调用频率相对较低,并返回一个 Promise,我将其返回值插入到 WinJS 游戏对象中。

现在我有第二种情况,我想通过将在动画阶段发生的必要数学工作委托给单独的线程来加速 SVG 动画,并返回一个表示要执行的纯 UI 操作的对象,例如,应该移动/增长等的游戏对象列表,并具有快速针对 DOM 的主线程操作(我正在使用 Knockout)。与第一种情况不同,这种后台线程交互会发生在每个动画增量中,所以,相当多。

我打算用一个网络工作者来实现这个,我已经部分开始工作了,但我想确保我了解这两种方法的优缺点以及推荐的用例。似乎调用 WinRT 组件和调用 Web Worker 都涉及对正在传递的对象进行某种序列化或翻译。对于我现有的 WinRT 调用,我有一个 WinRT 工厂类作为我的 js 对象的属性,我使用它来构建游戏的镜像简化 WinRT 表示以传递给 WinRT 组件。对于网络工作者,我必须传递游戏相关方面的 JSON 副本,然后再次将结果翻译回来。再次调用 C# 会更好,还是真的只推荐用于不经常调用的调用?每个的相对开销是多少?我还有什么遗漏的吗?

【问题讨论】:

  • 对 WinRT 对象的调用非常昂贵(也就是说,很慢)。一定要测量开销。我怀疑每个动画帧都会太快而无法跟上。但是衡量,不要猜测。

标签: c# multithreading windows-runtime winjs web-worker


【解决方案1】:

除了 Tavares 提到的之外,没有真正的硬性规定。 WebWorkers 之间的通信比调用 WinRT 更快,但 WebWorkers 不是您想要反复创建和销毁的东西。 在这种情况下,我个人会使用我在启动期间创建一次的 Webworker,然后在每次需要计算时调用其中的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2016-08-18
    • 2016-07-23
    相关资源
    最近更新 更多