テキストプレーンファイルとxmlファイルにデータを保存する場合のパフォーマンスの比較を試みます。
最初の関数は、プレーン テキストの 1000000 レコードを含む 1 つのファイルと、xml の 1000000 (同じデータ) レコードを含む 1 つのファイルの 2 つのファイルを作成します。まず、ファイル サイズの違いに注意する必要があります: ~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");
}
2 番目の関数は、これら 2 つのファイルを読み取ります。最初にプレーン テキストをディクショナリに読み取り (実際の使用をシミュレートするため)、その後 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 ファイルのサイズは、テキスト ファイルのサイズのほぼ 2 倍であり、テキスト ファイルの 3 分の 1 の速度で読み込まれます。
XML の処理は (抽象化レベルのため) プレーン テキストよりも便利ですが、CPU/ディスクの消費量が多くなります。
したがって、ファイルが小さく、パフォーマンスの観点から許容できる場合は、XML データ セットで問題ありません。ただし、パフォーマンスが必要な場合は、XML データ セット (利用可能な任意の種類のメソッドを含む) がプレーン テキスト ファイルよりも高速かどうかはわかりません。基本的に、それは最初の理由から始まります。タグが多いため、XML ファイルが大きくなります。