坚持使用XML:多个文件还是单个文件?

时间:2011-04-21 15:50:38

标签: c# xml

我已经就What would be a good approch for using XML as data persistence for a small C# app?提供了一般指导原则。

我决定在引擎盖下使用XML。这是一个小应用程序,一个供教师使用的报告卡应用程序。这些是我的主要实体:

  • 学生
  • 老师(应该只有一个,但我会因为未来的整合可能性而存储它)
  • 年级(每个课程的学生可以有多个年级)

我有一些我想要的建议:

  • 在幕后,我应该为每个实体或一个大的XML文件提供一个XML文件吗?
    • 在绩效视角下的表现如何
    • 数据加入视角下的情况
  • 在幕后,我应该使用Linq来实现XML吗?还有什么东西可以考虑吗?

1 个答案:

答案 0 :(得分:2)

一个XML文件可能更容易。

该文件可能如下所示:

<ReportCardData>
    <Students> 
       <Student>...data for student A ...</Student>
          ...
    </Students>
    <Teachers>
       <Teacher> ...
         ...
    </Teachers>
    <Courses>
       <Course> ...
          ...
    </Courses>
 </ReportCardData>

C#中的代码如下所示:

public class ReportCardData 
{
   public List<Student> Students;
   public List<Teacher> Teachers;
   public List<Course> Courses;
}

反序列化(读取)数据的代码如下所示:

ReportCardData rcd = null;
var s= new System.Xml.Serialization.XmlSerializer(typeof(ReportCardData>));
using(System.IO.StreamReader reader= System.IO.File.OpenText(filepath))
{
    rcd= (ReportCardData) s.Deserialize(reader);
}

...务必添加适当的异常处理等。

使用XML Serialization可以正常工作,即使对于具有数十兆字节的大型数据集也是如此。 (如果你在谈论100兆字节的数据,那么可以考虑像SQL Express这样的真实数据库)

阅读和写作表现可能会很好。 请记住,当您从XML文件反序列化数据时,整个数据集将保存在应用程序的内存中。因此,如果它是15mb的等级数据,那么它一次都在内存中。

您还询问了“数据加入视角” - 不确定这意味着什么,但使用Linq to XML,您可以跨该数据执行查询。内存中查询的性能也很好。