0

我有一个通过循环从 URL 返回的 XML 文件创建的对象数组列表。由于它可能很大,具体取决于客户端请求的数据量,我想在 Gridview 或类似的东西中以 50 页左右的页面显示它。它有 15 个属性,即字符串、日期和整数,并且需要能够对它们中的任何一个进行排序。我不认为在客户端进行排序遵循 3 层模式。我也不认为我应该将数组列表保存在 state 中。我是 3 层应用程序的新手,所以我想了解如何保留原始列表以使我能够获取下一页数据,同时能够对任何列上的当前页面进行排序。

4

1 回答 1

0

好吧,有很多方法可以给猫剥皮,我的可能不是最好的,但是,如果是我,我可能会创建一个带有两个整数参数的服务,PageIndex 和 PageSize,这样客户端就可以只请求它需要什么。毕竟,所需的信息可能在前 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 回答