当前位置:  开发笔记 > 编程语言 > 正文

IsInvokeRequired有多贵

如何解决《IsInvokeRequired有多贵》经验,为你挑选了1个好方法。

有没有关于它究竟有多昂贵的文件:

if (x.IsInvokeRequired)
{
    beginInvoke . . . .
}

如果你有一个90%的时间都在后台线程上(因此需要)的情况值得吗?

如果您有一个案例,其中90%的时间是在UI线程上(因此不是必需的)是否值得?

围绕这个的任何指标都会很棒.



1> JaredPar..:

真正的答案:

使用分析器

模糊答案:

我认为您需要考虑两个函数的相对成本与InvokeRequired的绝对成本.

InvokeRequired for Control基本上将当前的ThreadId与预期的ThreadId进行比较.如果你看反射器,代码会稍微复杂一点,但实际上它就是它正在做的事情.这是相当便宜的,因为它只是一些函数调用和比较.

BeginInvoke涉及获取多个锁,将委托添加到调用队列,并可能在线程之间添加元帅.相对于实际的InvokeRequired调用,此代码要昂贵得多(可能是一个数量级或2).你需要更多的调用,其中InvokeRequired返回true,然后你才会看到任何增益直接进入BeignInvoke.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有