using System;
using System.Text;
using System.Diagnostics;
using System.Collections.Generic;
class TestClass
{
public List<string> Base { get; set; }
public TestClass()
{
this.Base = new List<string>();
GenFakeBase();
}
public TimeSpan FormatStringTest()
{
Stopwatch sw = new Stopwatch();
sw.Start();
foreach (var z in this.Base) {
var dt = String.Format("20{0}.{1}.{2}",
z.Substring(0, 2),
z.Substring(2, 2),
z.Substring(4, 2));
}
sw.Stop();
return sw.Elapsed;
}
public TimeSpan StringBuilderFormatTest()
{
Stopwatch sw = new Stopwatch();
sw.Start();
foreach (var z in this.Base)
{
StringBuilder sb = new StringBuilder();
var dt = sb.AppendFormat("20{0}.{1}.{2}",
z.Substring(0, 2),
z.Substring(2, 2),
z.Substring(4, 2)).ToString();
}
sw.Stop();
return sw.Elapsed;
}
private void GenFakeBase()
{
Random r = new Random();
for (int i = 0; i < 40000; i++)
{
this.Base.Add(String.Format("{0:yyMMdd}",
new DateTime(r.Next(2000, 2099), r.Next(1, 12), r.Next(1, 25))));
}
}
public static void Main()
{
for(int i=0;i<20;++i)
{
TestClass t=new TestClass();
if((i&1)!=0) Console.WriteLine(String.Format("FormatStringTest: {0}",t.FormatStringTest()));
else Console.WriteLine(String.Format("StringBuilderFormatTest: {0}",t.StringBuilderFormatTest()));
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dDsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCmNsYXNzIFRlc3RDbGFzcwogICAgewogICAgICAgIHB1YmxpYyBMaXN0PHN0cmluZz4gQmFzZSB7IGdldDsgc2V0OyB9CiAgICAgICAgcHVibGljIFRlc3RDbGFzcygpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLkJhc2UgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgICAgIEdlbkZha2VCYXNlKCk7ICAgICAgICAgICAgCiAgICAgICAgfQogCiAgICAgICAgcHVibGljIFRpbWVTcGFuIEZvcm1hdFN0cmluZ1Rlc3QoKQogICAgICAgIHsKICAgICAgICAgICAgU3RvcHdhdGNoIHN3ID0gbmV3IFN0b3B3YXRjaCgpOwogICAgICAgICAgICBzdy5TdGFydCgpOwogICAgICAgICAgICBmb3JlYWNoICh2YXIgeiBpbiB0aGlzLkJhc2UpIHsKICAgICAgICAgICAgICAgIHZhciBkdCA9IFN0cmluZy5Gb3JtYXQoIjIwezB9LnsxfS57Mn0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LlN1YnN0cmluZygwLCAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgei5TdWJzdHJpbmcoMiwgMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHouU3Vic3RyaW5nKDQsIDIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgICAgIHJldHVybiBzdy5FbGFwc2VkOwogICAgICAgIH0KIAogCiAgICAgICAgcHVibGljIFRpbWVTcGFuIFN0cmluZ0J1aWxkZXJGb3JtYXRUZXN0KCkKICAgICAgICB7CiAgICAgICAgICAgIFN0b3B3YXRjaCBzdyA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICAgICAgc3cuU3RhcnQoKTsKICAgICAgICAgICAgZm9yZWFjaCAodmFyIHogaW4gdGhpcy5CYXNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgICAgICAgIHZhciBkdCA9IHNiLkFwcGVuZEZvcm1hdCgiMjB7MH0uezF9LnsyfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LlN1YnN0cmluZygwLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LlN1YnN0cmluZygyLCAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHouU3Vic3RyaW5nKDQsIDIpKS5Ub1N0cmluZygpOwogCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3cuU3RvcCgpOwogICAgICAgICAgICByZXR1cm4gc3cuRWxhcHNlZDsKICAgICAgIH0KIAogICAgICAgIHByaXZhdGUgdm9pZCBHZW5GYWtlQmFzZSgpCiAgICAgICAgewogICAgICAgICAgICBSYW5kb20gciA9IG5ldyBSYW5kb20oKTsKIAogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQwMDAwOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMuQmFzZS5BZGQoU3RyaW5nLkZvcm1hdCgiezA6eXlNTWRkfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZShyLk5leHQoMjAwMCwgMjA5OSksIHIuTmV4dCgxLCAxMiksIHIuTmV4dCgxLCAyNSkpKSk7CiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgCiAKICAgICAgICB9CiAgICAgICAgCgkJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJCXsKCQkJZm9yKGludCBpPTA7aTwyMDsrK2kpCgkJCXsKCQkJCVRlc3RDbGFzcyB0PW5ldyBUZXN0Q2xhc3MoKTsKCQkJCWlmKChpJjEpIT0wKSBDb25zb2xlLldyaXRlTGluZShTdHJpbmcuRm9ybWF0KCJGb3JtYXRTdHJpbmdUZXN0OiB7MH0iLHQuRm9ybWF0U3RyaW5nVGVzdCgpKSk7CgkJCQllbHNlIENvbnNvbGUuV3JpdGVMaW5lKFN0cmluZy5Gb3JtYXQoIlN0cmluZ0J1aWxkZXJGb3JtYXRUZXN0OiB7MH0iLHQuU3RyaW5nQnVpbGRlckZvcm1hdFRlc3QoKSkpOwoJCQl9CgkJfQogICAgfQogICAg