C# 投票有什么问题?
我最近听到一些开发人员说,他们只是轮询一些东西(数据库、文件等),以确定什么时候发生了更改,然后运行一个任务,例如导入 我真的反对这个想法,并认为利用现有的技术,如,等将远远优于投票 然而,我想找出为什么其他人喜欢一种方法而不是另一种方法的原因,更重要的是,我如何才能说服其他人在这个时代投票是错误的?投票本身并不是“错误的”C# 投票有什么问题?,c#,.net,asp.net,polling,C#,.net,Asp.net,Polling,我最近听到一些开发人员说,他们只是轮询一些东西(数据库、文件等),以确定什么时候发生了更改,然后运行一个任务,例如导入 我真的反对这个想法,并认为利用现有的技术,如,等将远远优于投票 然而,我想找出为什么其他人喜欢一种方法而不是另一种方法的原因,更重要的是,我如何才能说服其他人在这个时代投票是错误的?投票本身并不是“错误的” 这在很大程度上取决于它是如何实现的以及目的是什么。如果你真的关心即时的变更通知,这是非常有效的。您的代码处于紧密循环中,不断轮询(询问)资源是否已更改/更新。这意味着您会尽
这在很大程度上取决于它是如何实现的以及目的是什么。如果你真的关心即时的变更通知,这是非常有效的。您的代码处于紧密循环中,不断轮询(询问)资源是否已更改/更新。这意味着您会尽快收到通知,告知您有不同之处。但是,您的代码没有执行任何其他操作,而且对所讨论的对象的许多调用都会产生开销 如果您不太关心即时通知,您可以增加轮询之间的间隔,这也可以很好地工作,但选择正确的间隔可能很困难。时间太长,您可能会错过关键的更改;时间太短,您又回到了第一种方法的问题 在这些情况下,诸如中断或消息等替代方案可以提供更好的折衷方案。您会在实际可行的情况下尽快收到更改通知,但这种延迟不是您可以控制的,它取决于组件本身是否及时传递状态更改 投票“错”在哪里
- 这可能会占用资源
- 它可能是有限的(特别是如果你有很多事情想知道/投票)
- 这可能太过分了
- 这并不是天生的错误
- 这可能非常有效
- 这很简单
- 便宜的
- 可靠的
- 可测试
- 灵活的
- 这是对资源的浪费。您很可能会在未发生更改时检查更改。在这项操作上花费的CPU周期/带宽不会导致变化,因此本可以更好地花在其他事情上
- 轮询是在一定的时间间隔内完成的。这意味着您在下一次间隔时间过去之前不会知道发生了更改
- 轮询很容易,非常简单,它和任何程序代码一样简单。不轮询意味着你进入了异步编程的世界,这并不是一件容易的事,有时甚至会变得很有挑战性
与任何系统中的任何东西一样,阻力较小的路径通常更常见,因此总会有程序员使用轮询,甚至是伟大的程序员,因为有时不需要使用异步模式使事情复杂化
就我个人而言,我总是努力避免轮询,但有时我还是会进行轮询,特别是当异步处理的实际收益不太大时,比如在处理一些小的本地数据时(当然,您的速度会快一点,但用户不会注意到这种情况下的差异)。所以这两种方法都有空间。这并不是在回答你的问题。但实际上,特别是在这个处理器周期便宜、带宽大的“时代”,轮询对于某些任务来说实际上是一个非常好的解决方案 好处是:
此外,投票是一个非常简单的程序。这通常是在时间限制很短的情况下完成的第一步实现,因为它工作得很好,所以它仍然有效。原则上,轮询被认为是不好的原因有两个
最好是通知变更。这样,您就不会轮询尚未发生的更改,并且在收到通知后,您将立即知道更改。轮询的关键在于它是有效的!它可靠且易于实现 池的成本可能很高——如果您每分钟扫描一个数据库以查找更改,而一天只有两次更改,那么您将为一个非常小的结果消耗大量资源 然而,任何通知技术的问题在于,它们的实现要复杂得多,而且不仅不可靠,而且(这是一个大问题),您无法轻松判断它们何时不工作
因此,如果您确实放弃了对其他技术的轮询,请确保它对普通程序员是可用的,并且是超可靠的 它的简单-轮询很糟糕-效率低下,浪费资源等。不管怎样,总会有某种形式的连接在监视某种类型的事件,即使没有选择“轮询” 那么,为什么要多做一点,多做一些投票呢 回调是最好的选择——只需担心回调与当前进程的关系。在底层,正在进行轮询,以查看连接是否仍然存在
如果你一直给你的女朋友打电话,而她从来不接,那为什么还要一直打电话?只要留个口信,等她‘回电’;) 我同意避免投票是一项好政策。然而,关于,我会说