Như Josh đã nói, đây là một tối ưu hóa vi mô mà bạn thậm chí không nên cân nhắc nếu bạn chưa chứng minh sự cần thiết của nó. Nó cũng thực sự không khó để kiểm tra:
static void Main(string[] arguments)
{
const int iterations = 100000;
Stopwatch sw = new Stopwatch();
sw.Start();
string s = CreateUsingStringBuilder("content", iterations);
sw.Stop();
Console.WriteLine(String.Format("CreateUsingStringBuilder: {0}", sw.ElapsedMilliseconds));
sw.Reset();
sw.Start();
s = CreateUsingXmlWriter("content", iterations);
sw.Stop();
Console.WriteLine(String.Format("CreateUsingXmlWriter: {0}", sw.ElapsedMilliseconds));
Console.ReadKey();
}
private static string CreateUsingStringBuilder(string content, int iterations)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < iterations; i++)
sb.AppendFormat("<element>{0}</element>", content);
return sb.ToString();
}
private static string CreateUsingXmlWriter(string content, int iterations)
{
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
using (XmlWriter xw = XmlWriter.Create(sw))
{
xw.WriteStartElement("root");
for (int i = 0; i < iterations; i++)
xw.WriteElementString("element", content);
xw.WriteEndElement();
}
return sb.ToString();
}
Không chỉ là phiên bản XmlWriter
luôn nhanh hơn bằng cách một hoặc hai phần nghìn giây, nó tạo ra XML cũng như hình thành, trong đó phương pháp khác thì không. Tuy nhiên, cả hai phương pháp đều tạo ra các tài liệu XML có kích thước 100.000 phần trăm trong khoảng 60 mili giây trên máy tính xách tay hai tuổi của tôi, một khoảng thời gian giảm xuống không đáng kể so với thời gian cần thiết để đẩy nhiều dữ liệu qua mạng .
Nguồn
2010-03-19 17:49:37
Công việc tuyệt vời. Tôi thực sự đã làm điều này rất giống nhau trên máy tính của tôi và đã trở lại đây để đăng kết quả, nhưng bạn đánh tôi đến cú đấm. Kết quả của tôi về cơ bản giống như những gì bạn đã tìm thấy. +1 – Josh
Tôi đồng ý rằng XmlWriter là tốt hơn, nhưng nếu chúng ta đang nói về tối ưu hóa, string.Format không phải là một cách để đi. sb.Append ("") .Gửi (nội dung) .Đăng ký (" "); làm cho StringBuilder phiên bản nhanh hơn 2,5 lần rồi cái kia. –