我正在使用此处找到的实现对.NET 和 C# 中的 StringReader 类进行一些研究: https ://referencesource.microsoft.com/#mscorlib/system/io/stringreader.cs
我做了一个小类,我认为它使用相同的基本实现来读取字符串,但令我惊讶的是,我的代码比 .NET StringReader 慢两倍多。
这是我的课:
public class DataReader
{
private String source;
private int pos;
private int length;
public DataReader(string data)
{
source = data;
length = source.Length;
}
public int Peek()
{
if (pos == length) return -1;
return source[pos];
}
public int Read()
{
if (pos == length) return -1;
return source[pos++];
}
}
这是我的测试代码:
using System;
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var s = new String('x', 10000000);
StringReaderTest(s);
DataReaderTest(s);
}
private static void StringReaderTest(string s)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var reader = new StringReader(s);
while (reader.Peek() > -1)
{
reader.Read();
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
private static void DataReaderTest(string s)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var reader = new DataReader(s);
while (reader.Peek() > -1)
{
reader.Read();
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
}
这是整个事情的 .NET 小提琴。 https://dotnetfiddle.net/MqbU5q
这是小提琴的输出。我的实现速度慢了一倍。
77
159
我一定错过了什么,有人可以解释一下吗?