3 层应用程序和大型数组对象列表

本文关键字:数组 对象 列表 大型 应用程序 | 更新日期: 2023-09-27 18:35:34

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

3 层应用程序和大型数组对象列表

嗯,有很多方法可以给猫剥皮,我的可能不是最好的,但是,如果是我,我可能会创建一个接受两个整数参数的服务,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。