我们需要为巨型屏幕开发仪表板应用程序.它的作用是收集所有KPI(关键绩效指标)并以可视方式实时显示在巨型屏幕上,以便管理层知道最新情况.
因此,巨型屏幕将有20到30个独立的图形和饼图(数量可能很快增加)数据需要在可配置的时间内刷新.它在技术上意味着很多数据库调用来提取数据并通知GUI的数据更改.由于有许多单独的图表需要更新,我不希望同步更新它们,因为一个图形的耗时的数据库查询将延迟另一个图形的更新.
所以我在这里有两个选择,
虽然这两种方法都可以达到目的,但我想知道哪种解决方案更好,特别是考虑到硬件有16个内核这一事实.这两种方法的优点和缺点是什么?或者有没有更好的方法来解决这个问题?
我们计划使用.NET 4.0和WPF作为UI和C#作为开发语言.
我认为关于这两种技术的关键点如下:
多线程方法限制了您可以并行执行的操作数,因为线程是相对昂贵的资源.但是如果你需要大约20个线程,你就不会有任何麻烦.在C#中编写它可能更容易,因为您可以使用通常的顺序编程风格.
异步调用允许您"并行"执行更多数量的I/O绑定操作,因为每个调用不占用整个线程,因此这更有效,并且还受益于系统上的多个内核(因为异步操作是使用线程池处理).这可能更难以从C#中使用,因为您需要使用诸如的APM方法BeginXyz(这使得一些通常的编程模式难以编码).
您可以使用一些高级库在C#中编写异步代码 - 例如,AsynchronousEnumerator为您提供了一种相对舒适的编程风格.您也可以考虑使用具有异步工作流和消息传递并发性的 F#,这很可能是您的问题的完美匹配.