Bạn có chắc chắn mất 33% thời gian không? Làm thế nào bạn đo được điều đó? Nghe có vẻ hơn một chút nghi ngờ đối với tôi ...
này làm cho mọi thứ một chút chút nhanh hơn:
Basic: 2342ms
Custom: 1319ms
Hoặc nếu chúng ta cắt ra IO (Stream.Null
):
Basic: 2275ms
Custom: 839ms
using System.Diagnostics;
using System;
using System.IO;
static class Program
{
static void Main()
{
DateTime when = DateTime.Now;
const int LOOP = 1000000;
Stopwatch basic = Stopwatch.StartNew();
using (TextWriter tw = new StreamWriter("basic.txt"))
{
for (int i = 0; i < LOOP; i++)
{
tw.Write(when.ToString("dd.MM.yy HH:mm:ss:fff"));
}
}
basic.Stop();
Console.WriteLine("Basic: " + basic.ElapsedMilliseconds + "ms");
char[] buffer = new char[100];
Stopwatch custom = Stopwatch.StartNew();
using (TextWriter tw = new StreamWriter("custom.txt"))
{
for (int i = 0; i < LOOP; i++)
{
WriteDateTime(tw, when, buffer);
}
}
custom.Stop();
Console.WriteLine("Custom: " + custom.ElapsedMilliseconds + "ms");
}
static void WriteDateTime(TextWriter output, DateTime when, char[] buffer)
{
buffer[2] = buffer[5] = '.';
buffer[8] = ' ';
buffer[11] = buffer[14] = buffer[17] = ':';
Write2(buffer, when.Day, 0);
Write2(buffer, when.Month, 3);
Write2(buffer, when.Year % 100, 6);
Write2(buffer, when.Hour, 9);
Write2(buffer, when.Minute, 12);
Write2(buffer, when.Second, 15);
Write3(buffer, when.Millisecond, 18);
output.Write(buffer, 0, 21);
}
static void Write2(char[] buffer, int value, int offset)
{
buffer[offset++] = (char)('0' + (value/10));
buffer[offset] = (char)('0' + (value % 10));
}
static void Write3(char[] buffer, int value, int offset)
{
buffer[offset++] = (char)('0' + (value/100));
buffer[offset++] = (char)('0' + ((value/10) % 10));
buffer[offset] = (char)('0' + (value % 10));
}
}
Nguồn
2009-07-24 08:10:51
33% trong số những gì? 33% thời gian xử lý 2ms có thể thậm chí không đáng để tái cấu trúc. –
Ngoài ra, bạn đã sử dụng công cụ nào để xác định 33%? Các công cụ khác nhau đôi khi đo lường những thứ khác nhau một cách tinh tế, vì vậy nó đáng để biết ... – Stobor
Làm cách nào để bạn thêm chuỗi kết quả vào đầu ra của mình? Stringbuilder? –