Gunnarhawk
Gunnarhawk

Reputation: 437

Is there a faster way to generate XML Files

I am generating a XML file with hundreds of thousands of elements and the runtime of my code is currently over 3 minutes! I have tried both XDocument and XmlDocument to see if either would decrease the runtime; XDocument was better, but only by a small margin. Is there anything else I can try?

Code

string path = Server.MapPath("~/Temp/employee.xml");

XDocument d = new XDocument(new XElement("Employees"));
d.Declaration = new XDeclaration("1.0", "utf-8", "true");

while (reader.Read())
{
    d.Root.Add(new XElement("Employee",
        new XElement("LastName", reader["lastname"].ToString()),
        new XElement("FirstName", reader["firstname"].ToString()),
        new XElement("MiddleInitial", reader["middleini"].ToString()),
        new XElement("ID", reader["id"].ToString()),
        new XElement("Title", reader["title"].ToString()),
        new XElement("DOB", reader["title"].ToString()),
        new XElement("Category", reader["category"].ToString()),
        new XElement("Supervisor", reader["supervisor"].ToString()),
        new XElement("CurrentAddress", reader["address1"].ToString()),
        new XElement("Address", reader["address2"].ToString()),
        new XElement("City", reader["city"].ToString()),
        new XElement("State", reader["state"].ToString()),
        new XElement("ZipCode", reader["zip"].ToString()),
        new XElement("OfficePhone", reader["office_phone"].ToString()),
        new XElement("HomePhone", reader["home_phone"].ToString()),
        new XElement("Email", reader["email_address"].ToString()),
        new XElement("DateHired", reader["chem_employment_date"].ToString()),
        new XElement("DateTerminated", reader["emp_terminate_date"].ToString()),
        new XElement("StatusCode", reader["status_code"].ToString()),
        new XElement("Room", reader["room"].ToString()),
        new XElement("IsPrivate", reader["isprivate"].ToString()),
        new XElement("Floor", reader["floor"].ToString()),
        new XElement("Wing", reader["wing"].ToString()),
        new XElement("InRoster", reader["isroster"].ToString()),
        new XElement("RosterCategory", reader["roster_category"].ToString()),
        new XElement("LastModified", reader["lastmodified"].ToString()),
        new XElement("ShowReport", reader["isbudget"].ToString()),
        new XElement("ModifiedBy", reader["lastmodifiedby"].ToString())
    ));
    d.Save(path);
}

Upvotes: 0

Views: 700

Answers (1)

Micah Armantrout
Micah Armantrout

Reputation: 6971

Try using the xmlwriter class

https://learn.microsoft.com/en-us/dotnet/api/system.xml.xmlwriter?view=net-5.0

C# export of large datatbase to XML

XmlWriter uses less memory than XmlDocument, but you will have to write the entire document from scratch each time.

Upvotes: 2

Related Questions