-1

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

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


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

4

3 回答 3

3

您可以使用无状态会话来获取数据。

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

但首先问问你自己,你真的需要显示数百万行吗?这对你的用户有什么价值?他们能否轻松找到所需的数据?

此外,DataGrid它本身会占用大量内存(无论您使用的是 Windows Forms、WPF、ASP.NET...)。用于存储数据本身的内存,以及用于存储额外 DataGrid 列/单元元数据的内存。

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

于 2012-07-23T11:35:16.897 回答
2

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

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

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

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

我会看看其中一些资源:

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

于 2012-07-23T11:26:55.903 回答
0

随着应用程序复杂性的增加以及它们赖以生存的数据变得复杂,这种 OR 映射引擎的通用性可能会导致各种性能和可扩展性瓶颈。应用程序无法随着事务需求的增加而线性扩展。缓存是一种可以提高 NHibernate 应用程序性能的技术。Infect NHibernate 提供了一个开箱即用的基本的、不那么复杂的进程内 L1 缓存。但是,它不提供缓存解决方案必须具备的特性才能对应用程序性能产生显着影响。所以最好使用二级缓存,它可以帮助你提高你的 Nhibernate 应用程序的性能。有许多第三方 NHibernate 2nd Level 缓存提供者可用,但我建议您使用NCache. 这是一个很好的阅读,

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

于 2012-07-30T08:43:13.743 回答