問題タブ [skip-take]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linq-to-sql - LINQ TO SQL - スキップ/テイクが期待どおりに機能しない
私は IQueryable リポジトリを持っています (確かに、これを試したのはこれが初めてです)。Skip(1).Take(1)
ここにリポジトリがあります
そして、ここにサービスがあります
問題は、 SECONDではなく Order By 句でFIRSTレコードを返すことです。
ここで私が間違っていることを誰かに教えてもらえますか?
linq - LINQ スキップ & テイクのパフォーマンスは適切ですか?
顧客に関連する約 40 のデータ フィールドに対するクエリがあります。多くの場合、クエリは大量のレコード (最大 20,000 など) を返します。最初の 500 件程度の結果のみを使用したいと考えています。次に、一度に 10 個ずつページをめくることができるようにしたいだけです。
LINQはスキップして、これに対して合理的なアプローチをとっていますか? このアプローチを使用する場合と、他の方法で手動で行う場合の潜在的なパフォーマンスの問題はありますか?
linq-to-sql - カウントおよびスキップ時に IEnumerable が複数列挙される可能性がある
Linq2Sql でデータテーブルのデータを準備しています
このコードは、「IEnumerable の可能な複数列挙」として強調表示されます (Resharper 内)。
そして、Resharper が正しいと 100% 確信しています。
警告を回避するためにこれを書き直すにはどうすればよいですか
明確にするために、フィルターの最後にToListを配置して、データベースに対して1つのクエリのみを実行できることがわかりました。
しかし、これにより、ネットワーク経由で転送したいよりも多くのデータが返されます。
ケーキを持って食べられないことを期待しています。:(
entity-framework - IQueryable かどうかを確認する方法Skip() および Take() を試行する前に OrderBy が適用されている
クエリをページ分割する拡張メソッドを構築しようとしています。ただし、例外を回避するために: System.NotSupportedException はユーザー コードによって処理されませんでした Message=The method 'Skip' is only supported for sorted input in LINQ to Entities. メソッド「OrderBy」は、メソッド「Skip」の前に呼び出す必要があります。
OrderBy が適用されているかどうかを確認したいのですが、そうでない場合はクエリを返します...次のようなもの:
より興味深いものにするために、Mycrosoft のDynamic Expression API (別名 Dynamic LINQ) を使用しているため、呼び出しコードは次のようになります。
または、このように厳密に型指定された式を使用して呼び出すことができます
このようなチェックは可能ですか?メソッド署名での使用にうんざりしましたが、OrderBy(string expression) を使用するとIOrderableQueryable<T>
Dynamic Linq が返さIOrderableQueryable
れないため、拡張機能は適用されません...
アップデート
提案(@GertArnoldによって指摘された)を使用する唯一の実行可能な解決策は、式ツリーを調べることでした。ただし、全体を使用する代わりに、またはExpressionVisitor
の直後に Paginate メソッドを呼び出す必要があることを要求することで、ソリューションを簡素化しました。これにより、ツリー全体を検索するのではなく、式ツリーの現在のノードのみをチェックできました。だからこれは私がやったことです:OrderBy
OrderByDescending
asp.net-mvc - ASP.NETMVCWebgridの効率的なページング
ASP.NET MVC 4プロジェクトとSQLビュー(vvItem)があります。ItemController
Index.cshtml表示
vvItemには、ほぼ400000レコードがあります。webgrid Pagerは表示されたレコードのみをロード(Take())し、次のページに移動する場合は最初のレコードをSkip()することを知っていると思いました。
Q:表示されたレコードのみをロードするビューを効率的に作成するにはどうすればよいですか?
JSONバージョンとNerdDinnerの2つのソリューションが見つかりました
私はJSONがあまり得意ではないので、NerdDinnerソリューションを試しました。そして、私のコメントした行のように、
//var pageditems = itemqry.Skip(10).Take(20);
itemqryにはすでにすべてのレコードがロードされており、ロードに多くの時間がかかりました。
Q2:ページングを今行うにはどうすればよいですか?ページ番号を変更する必要があります。Indexメソッドから。
sql-server - SQLServerとEFでテイクアンドスキップ
ASP.NET MVC 4アプリケーションがあり、EFを使用しています。テーブルとSQLビュー(ビューにはこのテーブルの行といくつかの重要でないデータ(〜1000レコード)が表示されます)があり、〜400.000レコードがあります。EFでデータを表示すると25秒かかります
SQL Server Management Studioでは、このクエリには0〜1秒かかります
Q:EFクエリが非常に遅いのはなぜですか?スキップアンドテイクを行うためにSPを作成する必要がありますか?
c# - LINQ to SQL で巨大なテーブルを読み取る: メモリ不足と遅いページング
特定の順序で読み取り、集計統計を計算する必要がある巨大なテーブルがあります。テーブルには正しい順序のクラスター化インデックスが既にあるため、レコード自体の取得は非常に高速です。LINQ to SQL を使用して、記述する必要があるコードを簡素化しようとしています。問題は、DataContext がオブジェクトを保持しているように見えるため、すべてのオブジェクトをメモリにロードしたくないということです。
これが内訳です。元の試みはこれでした:
これは非常に高速であり、ストリーミング速度も良好ですが、問題は、アプリケーションのメモリ使用量が増加し続け、止まることがないことです。私の推測では、LINQ to SQL エンティティはメモリ内に保持されており、適切に破棄されていません。そのため、 Out of memory when creating many objects C# を読んだ後、次のアプローチを試しました。これは、メモリを節約する機能が追加された、多くの人が使用する一般的なSkip
/パラダイムのようです。Take
_conn
は事前に作成され、クエリごとに一時的なデータ コンテキストが作成されるため、関連するエンティティがガベージ コレクションされることに注意してください。
これで、データをストリーミングしているときにメモリ使用量がまったく増加しないという望ましい動作が得られました。しかし、もっと悪い問題Skip
があります。基礎となるクエリが実際にサーバーに前のすべてのページのすべてのデータを通過させるように見えるため、データの読み込みがますます遅くなります。クエリを実行している間、各ページの読み込みに時間がかかり、これが 2 次演算になっていることがわかります。この問題は、次の投稿に表示されています。
データのページングによるメモリの使用を制限しながら、各ページを一定時間でロードできるようにするLINQでこれを行う方法を見つけることができないようです。これを適切に行う方法はありますか?上記の最初のアプローチでオブジェクトを明示的に忘れるように DataContext に指示する方法があるかもしれませんが、その方法がわかりません。
c# - Take() と Skip() をモジュール化するには?
私はこのような構造体を持っています:
また、主にこのバイト配列を持っています:
そして、この関数内にデコード関数があり、Take(5) と Skip (3) を次のように実行します。
Take(3) または Skip (5) を使用する代わりに、Variable を割り当ててこれを自動的に計算できますか?
c# - Skip (および Take などの同様の機能) のパフォーマンス
.NET Framework (型) のSkip
/拡張メソッドのソース コードを調べたところ、内部実装がメソッドで動作していることがわかりました。Take
IEnumerable<T>
GetEnumerator
IEnumerable<T>
1000 個の要素を持つ があるとします (基になる型は ですList<T>
)。list.Skip(990).Take(10) を実行するとどうなりますか? 最後の 10 個の要素を取得する前に、最初の 990 個の要素を反復処理しますか? (これは私がそれを理解する方法です)。Skip
はいの場合、マイクロソフトが次のようなメソッドを実装しなかった理由がわかりません。
実際、彼らはCount
例えばメソッドのためにそれをしました...
では、その理由は何ですか?
c# - LinqToEntities Skip/Take oracle の実装が非常に遅いのはなぜですか
Context は、Oracle Database、Entity Framework 5、LinqToEntities、Database First です。
いくつかの大きなテーブルにページネーションを実装しようとしています.linqToEntitiesクエリは次のようになります:
実際には、スキップしたいレコードの数 (0 または 16300) に応じて、0.08 秒から 10.7 秒になります。
私には奇妙に思えるので、生成されたSQLをチェックしました。これがどのように見えるかです:
実際に SQL Developer で時間を費やしたのは Oracle かどうかを確認したところ、そうでした。
次に、実行計画を確認したところ、次のように表示されました。
私が実際に理解しているのは、row_number に対する最初のフィルターには STOPKEY がなく、おそらくサブクエリ全体をフェッチするということだけです。
私が間違っていなければ、リクエストはODT / ODP / ..によって生成されるため、Oracle DB用に最適化する必要があります..(そして私はそれを自分で変更することはできません)
多分私のデータベースモデルは腐っており、インデックスや最適化を追加してよりうまく機能させることができますか?