2017-01-17 58 views
0

我有一個使用NHibernate的WPF應用程序。應用程序的啓動或任何利用此域的應用程序都非常緩慢。驗證數據庫模式需要大約30秒,但我不知道爲什麼。該數據庫有〜230個表格。以下是dotTrace的屏幕截圖,顯示了主要瓶頸的位置。構建配置很慢,但我已經按照這裏和其他地方的說明來緩存配置並從文件中讀取配置。這有所幫助。但是現在看來在需要與數據庫進行交談時會遇到一些問題。任何有識之士將不勝感激。另外,請讓我知道是否需要其他信息來幫助診斷問題。如何提高關於模式驗證的NHibernate BuildSessionFactory性能

dotTrace profile

enter image description here

+0

你能否看到它是否發送虛擬查詢來獲取實際的數據庫表模式?我不記得NHibernate這樣做,也許是另一種設置?跟蹤只是大約30ms,而不是30秒。 –

+0

@ErikHart 33,000ms是33秒。 – TyCobb

+0

跟蹤看起來是〜33k毫秒;那不是約30秒? –

回答

0

看來使用hbb2ddl,自動模式生成,驗證爲每個表架構查詢模式。也許還在做其他操作,在跟蹤中不可見。驗證可能是默認設置,如說,比如這裏:

https://weblogs.asp.net/ricardoperes/nhibernate-pitfalls-schema-auto-action

我沒有這個與NHibernate工作時配置;我可以有一個不同的NHib和數據庫表模式,它不會拋出錯誤,直到我實際訪問表。儘管如此,建立會議工廠約100張桌子在探查器(nts)中花了幾秒鐘。

也許最好禁用驗證調試,只要架構沒有改變。

如果每個模式查詢需要20ms,網絡延遲加上數據庫和客戶端的處理,對於230個表至少接近5秒。當實際往返時間更長時更多。

SQL Server事件探查器還可能顯示應用程序傳入的內容,尤其是模式查詢進入的時間長度以及它們在數據庫中的持續時間。

+0

我已經考慮禁用此功能,但我還沒有找到任何介紹如何這樣做的內容。看起來像一個SchemaAutoAction必須被配置。 –