我們正在開發一個使用NHibernate的c#windows服務,它應該處理一批記錄。Nhibernate中的Multithread UnitOfWork
該服務目前需要處理約6000多條記錄,並且需要約3個小時來處理這些記錄。發生很多db命中,並且在我們試圖最小化這些時,我們還在探索多線程選項來提高性能。
我們使用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?
任何幫助非常感謝。
感謝