1

これはちょっと奇妙な質問かもしれませんが、誰かがアイデアを持っているかもしれません...

NHibernate1.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では、コードの実行に数秒かかりましたが(特に、LoadAlの販売ソースの呼び出し)、問題なくレンダリングされました。3.3にアップグレードした後、LoadAlのStatementsSourcesの呼び出しにはほぼ同じ時間がかかりましたが、ddl.DataBind()が呼び出されると、ページがハングし、最終的にタイムアウトになりました。

オブジェクトのリスト全体を取得してドロップダウンをロードするのは最善の方法ではないことを私は知っています。必要なフィールドを取得するだけで済みます。これは単なる例ではありません。この問題は、オブジェクト全体が必要なグリッドビューをロードするときにも発生します。本当の問題は、これらのグリッドの多くに検索結果が読み込まれ、ユーザーは何も検索しないオプションがあるため、ページがタイムアウトすることです。

基本的に、このタイムアウトの問題を回避する方法があるかどうか(おそらく、NHibernateの設定が欠落しているのでしょうか?)、またはプロジェクト全体をリファクタリングする必要があるかどうかを知りたいと思います。

どんな助けと洞察も大歓迎です。

.net 4を試してみても、同じ結果が得られることに注意してください。

4

1 に答える 1

0

問題は、子オブジェクトを強制的にロードする.DataBind()呼び出しでした。子オブジェクトのロードを回避するためGetHashCode()に変更する必要があります。GetHashCode()有益なコメントを寄せてくれたMiroslavに感謝します。

于 2012-08-06T16:21:40.147 に答える