0

URL から返された XML ファイルをループして作成したオブジェクトの配列リストがあります。クライアントから要求されるデータの量によっては大きくなる可能性があるため、Gridview などで 50 ページ程度で表示したいと考えています。文字列、日付、整数である 15 個のプロパティがあり、それらのいずれかで並べ替える機能が必要です。クライアント側でソートを行うことは、3層パターンに従うとは思いません。また、配列リストを状態で保存する必要はないと思います。私は 3 層アプリを初めて使用するので、元のリストを保持してデータの次のページを取得できるようにし、現在のページを任意の列で並べ替える方法についていくつかのアイデアを得たいと思います。

4

1 に答える 1

0

猫の皮を剥ぐ方法はたくさんありますが、私の方法は最善ではないかもしれませんが、私だったら、PageIndex と PageSize という 2 つの整数パラメータを受け取るサービスを作成するでしょう。必要なもの。結局、必要な情報は最初の 10 件の結果に含まれる可能性があるのに、なぜ 10000 件をダウンロードする必要があるのでしょうか。

XML が外部 URL から取得されたものなのか、それともサイトから入手できるものなのかはわかりません。外部の場合、クライアントがサービスからデータを初めて要求したときに、XML をロードしてディスクに保存します。次に、サーバーはそれを XDocument としてロードし、Linq を使用して必要なデータを照会できます。

次のようなもの (完全にテストされていません):

    public ArrayList GetObjects(int pageIndex, int pageSize)
    {
        XDocument xmlDoc = XDocument.Load("resource.xml");
        var objects = (from o in xmlDoc.Descendants() 
                       select o).Skip(pageIndex).Take(pageSize);

        // parse elements into objects and add to collection before returning
    }

私はそれで十分だと思っていたでしょう-リクエストごとにファイルをリロードする際に深刻なパフォーマンスの問題があることが判明した場合は、キャッシュのアイデアをいつでも再検討します. たぶん、.NET 4 でサポートされているメモリ マップ ファイル、またはより初歩的なキャッシュ メカニズムを調べてみたいと思います。残念ながら、私はどちらの専門家にもほど遠いので、これらについてこれ以上話すことはできません.

さらに、.NET 4 を使用していた場合は、ArrayList ではなく、厳密に型指定されたジェネリック コレクションを返します。

于 2012-05-29T16:07:50.987 に答える