1

这可能是一个奇怪的问题,但也许有人有一个想法......

我刚刚完成并将 NHibernate 1.2 升级到 3.3。升级进行得相当顺利,一切似乎都正常工作,除非我尝试将 IList 对象数据绑定到 DropDown 或 GridView。基本上发生的情况是,如果列表很大,.DataBind 调用需要很长时间,通常会导致应用程序超时。

我确信这个问题与绑定大型列表有关,但奇怪的是在 nhibernate 升级之前问题没有发生。例如,以下代码在升级期间未更改:

MarketSourceLogic sourceLogic = new MarketSourceLogic();
ddl = ((DropDownList)Accordion1.FindControl("dEditSourceAbbr"));
ddl.DataSource = sourceLogic.LoadAllMarketSources();
ddl.DataTextField = "Abbr";
ddl.DataValueField = "MarketSourceId";
ddl.DataBind();
ddl.Items.Insert(0, new ListItem(Constants.DROPDOWN_SELECT_TEXT, "0"));

在 NHib 1.2 中,代码需要几秒钟才能执行(尤其是 LoadAllMarketSources 调用),但不会出现问题。升级到 3.3 后,LoadAllMarketSources 调用花费了大约相同的时间,但是一旦调用 ddl.DataBind(),页面就会挂起并最终超时。

我知道这不是通过获取整个对象列表来加载下拉列表的最佳方式,我应该只获取我需要的字段。这不是重点,这只是一个例子。加载需要整个对象的gridview时也会出现问题。真正的问题是这些网格中的许多都加载了搜索结果,并且用户可以选择不搜索任何内容,因此页面将超时。

基本上我想知道是否有办法解决这个超时问题(也许我错过了 NHibernate 设置?)或者整个项目是否需要重构。

任何帮助和见解表示赞赏。

请注意,我确实尝试使用 .net 4 并获得了相同的结果。

4

1 回答 1

0

问题是.DataBind()正在调用GetHashCode()强制子对象加载。只需要修改GetHashCode()以避免加载子对象。非常感谢 Miroslav 的有益评论。

于 2012-08-06T16:21:40.147 回答