【发布时间】:2011-07-25 18:40:31
【问题描述】:
我们正在开发一个使用 NHibernate 的 c# windows 服务,它应该处理一批记录。
该服务需要处理大约 6000 条记录,目前大约需要 3 个小时来处理这些记录。有很多 db hits 发生,在我们努力将这些命中率降至最低的同时,我们也在探索多线程选项以提高性能。
我们正在使用 UnitOfWork 模式来访问 NHibernate 会话。
这大概是服务的样子:
public class BatchService
{
public DoWork()
{
StartUnitOfWork();
foreach ( var record in recordsToBeProcessed)
{
Process(record);
// Perform lots of db operations
}
StopUnitOfWork();
}
}
我们正在考虑使用任务并行库来尝试批量处理这些记录(使用 Parallel.Foreach () 方法)。 根据我目前所读到的关于 NHibernate 的内容,我们应该为每个线程提供一个单独的 NHibernate 会话。
我的问题是我们如何提供这个..考虑到只允许一个会话可用的 UnitOfWork 模式。
我应该考虑将 UnitOfWork 包装在处理单个记录的过程中吗?
非常感谢任何帮助。
谢谢
【问题讨论】:
标签: multithreading nhibernate unit-of-work