私たちは、レコードのバッチを処理するはずのNHibernateを使用しているc#windowsサービスに取り組んでいます。Nhibernateのマルチスレッド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セッションを提供する必要があります。
私の質問は、これをどのように提供するのですか?1つのセッションだけを利用できるようにするUnitOfWorkパターンがあると思います。
1つのレコードの処理を中心にUnitOfWorkをラッピングする必要がありますか?
ご迷惑をおかけして申し訳ございません。
おかげ