1 Attachment(s)
How Can I Make A Better CPU And I/O Perfomance?
i have text files, something like:
USER % THIS IS A USER LINE ALL CHAR EXCEPT '/n'
USERDATA % "DATA: ALL CHAR. it can be 3-20 lines."
so i need to read this file and make XML like that:
<?xml version="1.0" encoding="UTF-8"?>
<USERS>
<DATA>
<USER>THIS IS A USER LINE ALL CHAR EXCEPT '/n'</USER>
<USERDATA>DATA: ALL CHAR. it can be 3-20 lines.</USERDATA>
</DATA>
</USERS>
so i make it single thread. Here some code
Code:
public static void SingleThreadForEach(IEnumerable<string> LoadPath)
{
foreach (string itemFile in LoadPath)
{
string[] CurrentData = ReadText(itemFile);
using (XmlWriter writer = XmlWriter.Create(itemFile.Replace(".txt", ".xml")))
{
writer.WriteStartDocument();
writer.WriteStartElement("USERS");
writer.WriteStartElement("Data");
writer.WriteElementString("USER", CurrentData[0]);
writer.WriteElementString("USERDATA", CurrentData[1]);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
}
}
public static string[] ReadText(string path)
{
string[] lines = File.ReadAllLines(path);
string[] XMLData = new string[2];
XMLData[0] = lines[0].Remove(0,9);
XMLData[1] = string.Join(Environment.NewLine,lines.Where(s => s != lines[0]).ToArray()) ;
return XMLData;
}
So i need to make programm multithreaded. So i make it with Parallel.ForEach
Code:
public static void ParallelForEachReading(IEnumerable<string> LoadPath)
{
Parallel.ForEach(LoadPath, itemFile =>
{
string[] CurrentData = ReadText(itemFile);
using (XmlWriter writer = XmlWriter.Create(itemFile.Replace(".txt", ".xml")))
{
writer.WriteStartDocument();
writer.WriteStartElement("USERS");
writer.WriteStartElement("DATA");
writer.WriteElementString("USER", CurrentData[0]);
writer.WriteElementString("USERDATA", CurrentData[1]);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
});
}
Here is my projectAttachment 34179