我将尝试为您提供将数据存储在纯文本文件和 xml 文件中的性能比较。
第一个函数创建两个文件:一个包含 1000000 条纯文本记录的文件和一个包含 1000000 条(相同数据)记录的 xml 文件。首先,您必须注意文件大小的差异:~64MB(纯文本)与~102MB(xml文件)。
void create_files()
{
//create text file with data
StreamWriter sr = new StreamWriter("plain_text.txt");
for(int i=0;i<1000000;i++)
{
sr.WriteLine(i.ToString() + "<SEP>" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbb" + i.ToString());
}
sr.Flush();
sr.Close();
//create xml file with data
DataSet ds = new DataSet("DS1");
DataTable dt = new DataTable("T1");
DataColumn c1 = new DataColumn("c1", typeof(int));
DataColumn c2 = new DataColumn("c2", typeof(string));
dt.Columns.Add(c1);
dt.Columns.Add(c2);
ds.Tables.Add(dt);
DataRow dr;
for(int j=0; j< 1000000; j++)
{
dr = dt.NewRow();
dr[0]=j;
dr[1] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbb" + j.ToString();
dt.Rows.Add(dr);
}
ds.WriteXml("xml_text.xml");
}
第二个函数读取这两个文件:首先它将纯文本读取到字典中(只是为了模拟使用它的真实世界),然后读取 XML 文件。这两个步骤都以毫秒为单位(并将结果写入控制台):
开始将文本文件读入内存
文本文件在 7628 毫秒内加载到内存中
开始将 XML 文件读
入内存 在 21018 毫秒内将 XML 文件加载到内存中
void read_files()
{
//timers
Stopwatch stw = new Stopwatch();
long milliseconds;
//read text file in a dictionary
Debug.WriteLine("Start read Text file into memory");
stw.Start();
milliseconds = 0;
StreamReader sr = new StreamReader("plain_text.txt");
Dictionary<int, string> dict = new Dictionary<int, string>(1000000);
string line;
string[] sep = new string[]{"<SEP>"};
string [] arValues;
while (sr.EndOfStream!=true)
{
line = sr.ReadLine();
arValues = line.Split(sep,StringSplitOptions.None);
dict.Add(Convert.ToInt32(arValues[0]),arValues[1]);
}
stw.Stop();
milliseconds = stw.ElapsedMilliseconds;
Debug.WriteLine("Text file loaded into memory in " + milliseconds.ToString() + " milliseconds" );
//create xml structure
DataSet ds = new DataSet("DS1");
DataTable dt = new DataTable("T1");
DataColumn c1 = new DataColumn("c1", typeof(int));
DataColumn c2 = new DataColumn("c2", typeof(string));
dt.Columns.Add(c1);
dt.Columns.Add(c2);
ds.Tables.Add(dt);
//read xml file
Debug.WriteLine("Start read XML file into memory");
stw.Restart();
milliseconds = 0;
ds.ReadXml("xml_text.xml");
stw.Stop();
milliseconds = stw.ElapsedMilliseconds;
Debug.WriteLine("XML file loaded into memory in " + milliseconds.ToString() + " milliseconds");
}
结论:XML 文件大小几乎是文本文件大小的两倍,加载速度比文本文件慢三倍。
XML 处理比纯文本更方便(因为抽象级别),但它更消耗 CPU/磁盘。
因此,如果您有小文件并且从性能的角度来看是可以接受的,那么 XML 数据集就更好了。但是,如果您需要性能,我不知道 XML 数据集(使用任何可用的方法)是否比纯文本文件更快。基本上,它从第一个原因开始:XML 文件更大,因为它有更多的标签。