4

背景

我有一项服务连接到 Microsoft CRM 2011,并更新了数万条记录。在我们的开发环境中,单线程运行它会导致一分钟内只更新 30 条记录。我使用 TPL Parallel.Inovke 切换到多线程,但与 CRM 的连接不是线程安全的,因此我为我正在处理的每条记录创建一个新连接。此更改仅将我的吞吐量提高到每分钟 60 条记录。然后我回去将记录批处理在一起,这样每个线程都会打开一个连接,然后一次处理 1000 条记录。这将我的吞吐量提高到每分钟大约 500 次更新。我可以继续沿着这条路走下去,并尝试根据线程数微调批处理的大小,但真正的解决方案是执行某种连接池,所以每个线程都有它

如何执行连接池?

TPL 是否提供了一种将对象从正在完成的 Action 传递到将要处理的下一个 Action 的方法?如果没有,是否有一个很好的例子来说明如何编写自己的连接池类?

4

1 回答 1

3

我认为 TPL 中没有这样的东西,提供连接池不是它的工作。

但是这样做的一种方法是使用支持线程本地初始化的 的重载之一。Parallel.ForEach()

于 2012-05-03T13:31:22.907 回答