小编Mar*_*ser的帖子

WinForms多线程数据绑定场景,最佳实践?

我正在设计/重新编写应用程序的数据绑定部分,该应用程序大量使用来自后台线程的winforms数据绑定和更新(每秒一次> 100条记录).

让我们假设应用程序是一个股票交易应用程序,后台线程监视数据更改并将它们放到数据对象上.这些对象存储在一个BindingList<>并实现,INotifyPropertyChanged以通过数据绑定将更改传播到winforms控件.此外,数据对象当前正在通过WinformsSynchronizationContext.SendUI线程编组更改.用户可以在UI中输入一些值,这意味着可以从两侧更改某些值.并且更新不应该超出用户值.

所以我想到了几个问题:

  • 是否有一般设计 - 指导如何做到这一点(数据绑定中的背景更新)?
  • 何时以及如何在UI线程上编组?
  • 后台线程与绑定/数据对象交互的最佳方式是什么?
  • 应该使用哪些类/接口?(BindingSource,...)
  • ...

用户界面实际上并不知道有一个后台线程,它会更新控件,而且根据我在数据绑定场景中的理解,用户界面不应该知道数据的来源......您可以将后台线程视为将数据推送到UI的东西,所以我不确定背景工作者是否是我正在搜索的选项.

有时您希望在数据/业务对象的操作期间获得一些UI响应(例如,在重新计算期间设置背景).在绑定到后台的状态属性上提升属性是不够的,因为控制在计算完成后重新绘制了?我的想法是挂钩propertychanged事件并在控件上调用.update()......还有其他想法吗?

data-binding multithreading winforms

10
推荐指数
1
解决办法
4721
查看次数

TPL架构问题

我目前正在开展一个项目,我们面临着并行处理项目的挑战.到目前为止没什么大不了的;)现在问题.我们有一个ID列表,我们定期(每2秒)为每个ID调用StoredProcedure.每个项目需要单独检查2秒,因为它们是在运行时添加和删除的.此外,我们希望配置最大并行度,因为DB不应同时充满300个线程.正在处理的项目在完成上一次执行之前不应重新安排进行处理.原因是我们想要防止排队很多项目,以防数据库出现延迟.

现在我们正在使用一个自行开发的组件,它有一个主线程,定期检查需要安排处理的项目.一旦它有了列表,它就会删除那些基于自定义IOCP的线程池,然后使用等待句柄等待正在处理的项目.然后下一次迭代开始.IOCP因为它提供的工作窃取.

我想用TPL/.NET 4版本替换这个自定义实现,我想知道你将如何解决它(理想的简单和易读/可维护).我知道这篇文章:http://msdn.microsoft.com/en-us/library/ee789351.aspx,但它只是限制了使用的线程数量.叶子偷工作,定期执行物品....

理想情况下,它将成为一个通用组件,可用于需要定期为项目列表完成的所有任务.

欢迎任何投入,蒂安·马丁

.net c# task-parallel-library

6
推荐指数
1
解决办法
1715
查看次数

如何衡量一个锁的争用率

我目前在使用某个应用程序(.net 4.0,c#)的争用率时遇到问题.我正在维护.我想做的是写一个PerfCounter,如果一个部分锁无法被获取.现在我只有.net提供的整体计数器,但我想为一些选定的锁具有PerfCounter.

Profiler等对我来说不是一个选择,因为这是一个我无法触及的高性能生产环境,我可以记录perfcounters.

.net c# performance performancecounter contention

5
推荐指数
1
解决办法
831
查看次数