使用NHibernate获取大块数据

时间:2012-07-23 11:20:35

标签: database nhibernate

我使用C#在数据网格上显示了大约300万行数据。

目前正在使用NHibernate从数据库sqlserver 2005获取数据。 NHibernate 需要大量时间来获取数据。有没有办法使用 NHibernate 有效地从数据库中的数据中检索数据

---编辑----
由于应用程序具有大量数据可供操作,因此加载所有行只是最糟糕的情况。
在正常使用中,用户将加载10k行。使用分页可以最小化显示行的数量,但由于某些行依赖于其他行,因此我需要在初始化应用程序时加载所有数据。
即使有1000行,NHibernate也会变慢。任何提高性能的建议。
感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用Stateless Session来获取数据。

http://ayende.com/blog/4137/nhibernate-perf-tricks
http://darioquintana.com.ar/blogging/2007/10/08/statelesssession-nhibernate-without-first-level-cache/

但首先问你自己,你真的需要显示数百万行。这给您的用户带来了什么价值?他们可以轻松找到他们想要的数据吗?

此外,DataGrid本身将占用大量内存(无论您使用的是Windows窗体,WPF,ASP.NET ......)。用于存储数据本身的内存,以及用于存储其他DataGrid列/单元元数据的内存。

考虑只使用一部分数据。您可以允许用户通过数据进行过滤和/或添加分页。过滤器和分页可以转换为HQL / Criteria / Linq / QueryOver查询,最终转换为SQL查询。

答案 1 :(得分:2)

我的建议不是使用ORM来获取这么大小的数据,但我的第二点是你为什么要获取300万行数据并在网格中显示它?

没有用户可能想要滚动表格的3百万行。

您可以使用分页数据系统同时仅请求您正在查看的页面。或者,您可以过滤用户感兴趣的较小子集的数据。

如果您有3百万条记录,则所需数据可能是对这些记录的分析。

我会看看其中一些资源:

http://msdn.microsoft.com/en-us/magazine/cc164022.aspx

http://weblogs.asp.net/rajbk/archive/2010/05/08/asp-net-mvc-paging-sorting-filtering-using-the-mvccontrib-grid-and-pager.aspx

答案 2 :(得分:0)

随着应用程序的复杂性增加以及它们所依赖的数据变得复杂,这种OR映射引擎的普遍性可能会导致各种性能和可伸缩性瓶颈。随着交易要求的增加,应用程序无法线性扩展。缓存是一种可以增强NHibernate应用程序性能的技术。 Infect NHibernate提供了一个基本的,不那么复杂的进程内L1缓存。但是,它不提供缓存解决方案必须具有的对应用程序性能有显着影响的功能。因此,最好使用二级缓存,它可以帮助您提高Nhibernate应用程序的性能。有许多第三方NHibernate二级缓存提供商可用,但我建议你使用 NCache 。这是一个很好的阅读,

http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html