2009-12-31 177 views
0

我的問題是我能做些什麼來確定運行緩慢,或者我能做些什麼來加快它不知道確切的原因的原因。NHibernate的慢映射

我運行一個簡單的查詢,並似乎映射回實體正在採取永遠。結果集是350,這在我看來並不多。

IRepository repo = ObjectFactory.GetInstance<IRepository>(); 
var q = repo.Query<Order>(item => item.Ordereddate > DateTime.Now.AddDays(-40)); 

foreach (var order in q) 
{ 
    Console.WriteLine(order.TransactionNumber); 
} 

探查告訴我它是執行查詢7毫秒/ 35257ms,我假設前者是從DB的實際響應,而後者是需要NH做它的神奇時刻。

35秒太長。這是一個簡單的映射,一個表,嵌套的組件,使用流暢的接口來做映射。我只是啓動一個簡單的控制檯應用程序並運行一個查詢,在SessionFactory初始化之後測量緩慢,應該只有一個會話,並且我沒有使用事務。

感謝

+1

因此,它是行代碼中的2所走的是35秒執行? – 2009-12-31 16:45:22

+0

... 35秒肯定是__after__ SessionFactory被初始化,不包括初始化它的時間? – 2009-12-31 16:51:42

+0

正確的兩個計數。 – 2009-12-31 17:02:00

回答

2

如果你的數據庫查詢迅速恢復,那麼問題是某處代碼本身。這不太可能在NHibernate中。您的評論意味着您正在使用自定義用戶類型,並且很可能是因爲那裏存在特別低效的內容。我猜你正在使用NHProf作爲你的分析器?也許你應該使用一個直接的.NET分析器並查看代碼本身的性能,包括這些自定義類型?像螞蟻,dotTrace或AQTime。

+0

更正探查器。我想這是一個很好的建議,我沒有使用這個,因爲我只是以爲我是錯誤地配置NHibernate,因爲我對它很陌生。 – 2009-12-31 17:12:16

+0

不太可能 - 代碼中的速度很慢。試試這樣的分析器吧。 dotTrace有10天的試用期,並且相當易於使用。 – 2009-12-31 17:14:07

+0

那麼,我在Visual Studio中使用了默認的分析器,時序導致了197ms/543ms。在視覺工作室之外運行應用程序,速度也一樣快。有關VS爲何如此緩慢的想法? – 2009-12-31 17:58:12

0

很可能是你在做你的用戶類型的東西,需要花費大量的時間

0

嘗試禁用log4net的。如果它加快速度並且仍然希望將其用於其他目的,則僅禁用nhibernate。