-1

C#を使用してデータグリッドに表示する約300万行のデータがあります。

現在、 NHibernateを使用してデータベースsqlserver2005からデータをフェッチしています。NHibernate はデータの取得に多くの時間を要します。NHibernateを使用してデータベースのデータからデータを効率的に取得する方法はありますか?


---編集----
アプリケーションには操作する膨大なデータがあるため、すべての行をロードすることは最悪のシナリオにすぎません。
通常の使用では、ユーザーは10k行をロードします。ページングを使用して表示される行の数を最小限に抑えることはできませんが、一部の行は他の行に依存しているため、アプリの初期化中にすべてのデータを読み込む必要があります。
NHibernateは1000行でも遅くなります。パフォーマンスを改善するための提案。
ありがとう。

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フォーム、WPF、ASP.NET ...を使用しているかどうかに関係なく)。データ自体を格納するためのメモリと、追加のDataGrid列/セルのメタデータを格納するためのメモリ。

代わりに、データのサブセットのみを使用することを検討してください。ユーザーがデータをフィルタリングしたり、ページングを追加したりできるようにすることができます。フィルタとページングは​​、HQL / Criteria / Linq / QueryOverクエリに変換でき、最終的にはSQLクエリに変換できます。

于 2012-07-23T11:35:16.897 に答える
2

ここでの私の推奨事項は、このサイズのデータ​​をフェッチするためにORMを使用しないことですが、2番目のポイントは、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アプリのパフォーマンスを向上させることができる1つの手法です。Infect NHibernateは、基本的な、それほど洗練されていないインプロセスL1キャッシュをすぐに提供します。ただし、キャッシングソリューションがアプリケーションのパフォーマンスに顕著な影響を与える必要がある機能は提供されていません。したがって、第2レベルのキャッシュを使用する方がよいため、Nhibernateアプリのパフォーマンスを向上させるのに役立つ場合があります。多くのサードパーティのNHibernate2ndLevelキャッシュがあり、プロバイダーはそこで利用できますが、NCacheを使用することをお勧めします。これはそれについての良い読み物です、

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

于 2012-07-30T08:43:13.743 に答える