0

如果我有这个数据模型类:

public class Person
{
    private int _id;
    private int _deptID;
    private string _firstName;
    private string _lastName;

    public int ID
    {
        get { return _deptID; }
        set { _deptID = value; }
    }

    public int DeptID
    {
        get { return _id; }
        set { _id = value; }
    }

    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }

    public string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

...然后创建我的数据集

    private List<Person> GeneratePersonData()
    {
        List<Person> personData = new List<Person>();
      personData.Add(new Person() { ID = 1, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 2, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 3, DeptID = 105, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 4, DeptID = 43, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 5, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 6, DeptID = 32, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 7, DeptID = 2, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 8, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 9, DeptID = 2, FirstName = "John", LastName = "Doe" });

        return personData;
    }

然后我将数据存储到 xml 中,如下所示:

    private void StorePersonData()
    { 
    XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
        xmlWriterSettings.Indent = true;

        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Create))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
                using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
                {
                    serializer.Serialize(xmlWriter, GeneratePersonData());
                }
            }
        }
    }

现在,我想要做的是只将 xml 中具有特定 deptID 的人读入一个新列表,所以我这样做:

    private void ReadPersonData(int deptID)
    {
        List<Person>data = new List<Person>();
        List<Person> newData = new List<Person>();

        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
                 data = (List<Person>)serializer.Deserialize(stream);
            }
        }

        for (int i = 0; i < data.Count; i++)
        {
            if (data[i]._deptID == deptID)
            {
                newData.Add(data[i]);
            }
        }
    }
}

但是如果我有一个非常大的数据集,这种方法会非常慢。xml中有没有办法只读取满足特定条件的数据?

4

2 回答 2

0

不——一旦您采取了一种将数据保存在 XML 中然后对其进行查询的方法,那么对于大型数据集,它必须很慢。

这是静态数据还是变化?如果它是静态数据,为什么不将 xml 保存在内存中?

注 1:为什么不在 JSON 对象中序列化,而不是 XML。尺寸会小得多,因此您会看到一些改进。

注意 2:当您使用不同的应用程序(比如一个内置 .net 和一个内置 java)时,以 JSON 和 XML 保存数据是很好的。使用这些开放格式,您可以轻松传递数据。我看到的是,您存储数据而您读取数据?为什么是 XML(或 JSON)?

更新

对于 JSON 序列化 - 您可以使用http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

如果这个 xml 永远不会改变,那么不要每次都阅读它。读取并解析 xml,将其保存在内存中,以任何您喜欢的方式(会话、静态变量、缓存)。

为什么不使用 DB 来存储相同的信息?一个应用程序可以将数据写入数据库,而其他应用程序将从数据库中检索数据?

于 2013-08-07T16:05:33.530 回答
0

您可能需要重新考虑使用 XML 来存储数据。您的数据中没有太多结构,并且您正在进行随机访问。看起来数据库在存储、索引和检索/过滤这些数据方面做得更好;然后您可以根据需要将结果集导出为 XML。

于 2013-08-07T20:43:57.063 回答