2009-11-13 4 views
9

biz varsayılan NHibernate (v2.0 & 2.1) FlushMode = Otomatik son derece pahalı olması buluyorlar. NHibernate kaynağını gözden kızardı gerekenleri belirlemek için algoritmalar oturumdaki tüm kuruluşlar aracılığıyla döngü kaba kuvvet güvenmek olduğunu göstermektedir ve bu işlemde çalıştırmak her sorgu için oluşur. Biz 100 kat daha uzun FlushMode = Auto ile FlushMode kıyasla sürecini gördük birden sorgu ile birçok öğe üzerinde güncellemeleri ile bazı üretim senaryosunda NHibernate AutoFlush neden bu kadar pahalı kontrol ediyor? Uygulamada

, = adayın. FlushMode kullanımı için

Herhangi bir düşünce/tavsiye/en iyi uygulamalar vb

nhibernate AutoFlush algoritmaları optimizasyonu üzerinde herhangi bir fikir birden güncellemelerini içeren 'karmaşık' oturumu mantığı, birden fazla sorgu yaparken?

+0

ilgili soru: http://stackoverflow.com/questions/1724307/nhibernate-poor-performance-on-auto-flush-events yep ... aslında aynı sorun :) – zvolkov

+0

bilinen bir konu. Bir yılı aşkın bir süredir bilindiğini bilmek üzücü! Yapılan yıkım sayısını sınırlamak için kodu yeniden düzenlemenin birçok yolu olduğunu takdir ediyorum. Yine de Nhibernate'deki yıkama performansı olması gerekenden çok daha yavaş görünüyor. – Pawel

cevap

6

Bu yavaşlık bilinen bir sorundur ve NH-1365

olarak NH Jira izlenir NH üç gömme modu vardır: işlemek ve sorguları önce (gerekli

  • FlushMode.Auto = Temizleme, gerekirse). Bu varsayılan.
  • FlushMode.Commit = yalnızca NH işleminin gerçekleştirilmesi için devam edin
  • FlushMode.Never = hiçbir zaman durulama yapmayın (Flush denilene kadar). yerli (kimlik) PK jeneratör kullanmak varlıkların ekleme üzerindeki bu irade still go to DB.
+0

sayesinde memnun bilmek – Pawel