例如:
public voID WriteBytes(Byte[] buffer,Int32 offset,Int32 count){ this.EnsureFreeSpace(count); Buffer.Blockcopy(buffer,offset,this.buffer,this.position,count); this.position += count; if (this.length < this.position) { this.length = this.position; }}public voID ReadBytes(Byte[] buffer,Int32 count){ this.EnsureDataExist(count); Buffer.Blockcopy(this.buffer,buffer,count); this.position += count;}private voID EnsureFreeSpace(Int32 count){ if (this.buffer.Length - this.position < count) { throw new InvalIDOperationException(); }}private voID EnsureDataExist(Int32 count){ if (this.length - this.position < count) { throw new InvalIDOperationException(); }}
〜1.5-2倍慢
memoryStream.Write(...)memoryStream.Read(...)
在这个简单的测试中
Byte[] temp = new byte[64];stopWatch.Restart();for (int i = 0; i < 100000; i++){ ms.Write(temp,temp.Length); ms.position = 0; ms.Read(temp,temp.Length); ms.position = 0;}stopWatch.Stop();Console.Writeline(stopWatch.ElapsedMilliseconds);stopWatch.Restart();for (int i = 0; i < 100000; i++){ mb.WriteBytes(temp,temp.Length); mb.position = 0; mb.ReadBytes(temp,temp.Length); mb.position = 0;}stopWatch.Stop();Console.Writeline(stopWatch.ElapsedMilliseconds);
为什么?
在所有的测试优化启用.在调试模式下,平均差异如我所说〜1.7倍.在发布模式〜1.3倍,少但仍然存在.
编辑
感谢我的建议,我发现在Visual Studio之外,我的代码比内置代码快几倍或至少一样快.所以现在的问题是,为什么会发生这种情况?
作为一个捷径,请执行以下 *** 作:将整个测试代码放在for循环中并运行多次,比较输出并总是丢弃第一个结果.
总结以上是内存溢出为你收集整理的为什么c#内置的IO类比自制的类更快?全部内容,希望文章能够帮你解决为什么c#内置的IO类比自制的类更快?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)