我有一个使用NHibernate的WPF应用程序。应用程序的启动或利用此域的任何应用程序都非常慢。验证数据库架构需要大约30秒,但我不确定原因。该数据库有~230个表。下面是dotTrace的屏幕截图,显示了主要瓶颈的位置。构建配置很慢,但我已按照此处和其他地方的说明缓存配置并从文件中读取它。这有点帮助了。但现在看来,当需要与数据库通信时会出现一些问题。任何见解将不胜感激。另外,如果需要其他信息来帮助诊断问题,请告诉我。
答案 0 :(得分:0)
似乎使用hbb2ddl,自动模式生成,使用每个表的模式查询验证模式。也许还在做其他操作,在跟踪中不可见。验证可能是默认设置,如上所述,例如:
https://weblogs.asp.net/ricardoperes/nhibernate-pitfalls-schema-auto-action
使用NHibernate时我没有这个配置;我可以有一个不同的NHib和DB表模式,它不会抛出错误,直到我实际访问该表。尽管如此,在探测器(Ants)中使用大约100个表构建会话工厂需要几秒钟。
只要架构没有改变,也许最好禁用调试验证。
如果每个模式查询花费20ms,网络延迟加上DB和客户端中的处理,那么对于230个表,这至少接近5秒。当实际往返时间更长时更多。
SQL Server探查器还可能显示从应用程序传入的内容,尤其是模式查询进入的时间跨度,以及它们在数据库中的持续时间。