在 Silverlight 中调用 Dispatcher.CheckAccess() 是一种好的形式吗?

发布于 2024-12-12 10:52:54 字数 254 浏览 0 评论 0原文

我想知道以下代码是否会带来任何性能提升:

if (Deployment.Current.Dispatcher.CheckAccess())
{
    DoUIWork();
}
else
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    DoUIWork());
}

Dispatcher 是否足够智能,可以在不必要的情况下短路对 UI 线程的调度?

I wonder if the following code buys any performance gains:

if (Deployment.Current.Dispatcher.CheckAccess())
{
    DoUIWork();
}
else
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    DoUIWork());
}

Is the Dispatcher smart enough to short circuit a dispatch to the UI thread if its unnecessary?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

‘画卷フ 2024-12-19 10:52:54

与检查相比,我无法确定调度程序在从 UI 线程调度到自身时是否执行了任何昂贵的操作。但是 UI 线程中的 BeginInvoke 的行为可能与直接执行操作不同,因为它至少被放入队列中而不是立即调用。如果事后直接有代码,您可以区分这与删除条件语句之间的区别。

当然值得了解控制流,足以知道差异是否不重要。

I couldn't say whether the dispatcher does anything expensive when dispatching from the UI thread to itself, compared with the check. But BeginInvoke from the UI thread may behave differently from executing the operation directly, as it's at least put on the queue rather than invoked immediately. You could tell the difference between this and removing the conditional statement if you had code directly afterwards.

Certainly worth being aware of the control flow, enough to know if the difference doesn't matter.

李白 2024-12-19 10:52:54

如果它与标准 Windows SynchronizationContext 类似(很可能是),那么这两个选项就不一样。在处理任何现有消息的当前执行后,BeginInvoke 基本上会将要由调度程序消息泵执行的方法排队。
在您的示例中,如果您要使用 Invoke 而不是 BeginInvoke,则这两个选项是相同的。

If it is anything like standard Windows SynchronizationContext (and it probably is) then the two options are not the same. BeginInvoke will basicaly queue up the method to be executed by the dispatcher message pump after the current execution of any existing message has been processed.
In your example the two options be the same if you were to use Invoke instead of BeginInvoke.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文