博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())
阅读量:5140 次
发布时间:2019-06-13

本文共 2919 字,大约阅读时间需要 9 分钟。

无聊做了如题的一个算法的优劣性能比较,由于很多人都只关心结果,那么我先贴出结果如下:

由于我的测试数据量比较小,只能得出Array.Copy()和Buffer.BlockCopy()方法性能要好于Contact(),这个不用比较也能想到,如果想知道前两个谁的性能更好,

有兴趣的可以修改源码中的测试数据量就可以了。

测试源码如下:

static int len1 = 1470;        static int len2 = 906;        static byte[] bytes0 = new byte[len1];        static byte[] bytes1 = new byte[len2];        static void Main(string[] args)        {            // Uses the second Core or Processor for the Test            Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(1);            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;            // Prevents "Normal" Threads             Thread.CurrentThread.Priority = ThreadPriority.Highest;            Stopwatch sw = new Stopwatch();            byte[] resultBytes = null;            InitBytes();            //test            sw.Reset();            sw.Start();            while (sw.ElapsedMilliseconds < 1200)  // A Warmup of 1000-1500 mS                                                    // stabilizes the CPU cache and pipeline.            {                resultBytes = Contact(bytes0, bytes1);       // Warmup            }            sw.Stop();            for (int i = 0; i < 10; i++)            {                sw.Reset();                sw.Start();                resultBytes = Contact(bytes0, bytes1);                sw.Stop();                Console.WriteLine("Contact Ticks: {0} Time: {1} ms", sw.ElapsedTicks, sw.ElapsedMilliseconds);            }            sw.Reset();            sw.Start();            while (sw.ElapsedMilliseconds < 1200)  // A Warmup of 1000-1500 mS                                                    // stabilizes the CPU cache and pipeline.            {                resultBytes = BufferCopy(bytes0, bytes1);       // Warmup            }            sw.Stop();            for (int i = 0; i < 10; i++)            {                sw.Reset();                sw.Start();                resultBytes = BufferCopy(bytes0, bytes1);                sw.Stop();                Console.WriteLine("BufferCopy Ticks: {0} Time: {1} ms", sw.ElapsedTicks, sw.ElapsedMilliseconds);            }            sw.Reset();            sw.Start();            while (sw.ElapsedMilliseconds < 1200)  // A Warmup of 1000-1500 mS                                                    // stabilizes the CPU cache and pipeline.            {                resultBytes = ArrayCopy(bytes0, bytes1);       // Warmup            }            sw.Stop();            for (int i = 0; i < 10; i++)            {                sw.Reset();                sw.Start();                resultBytes = ArrayCopy(bytes0, bytes1);                sw.Stop();                Console.WriteLine("ArrayCopy Ticks: {0} Time: {1} ms ", sw.ElapsedTicks, sw.ElapsedMilliseconds);            }            Console.ReadKey();        }        static void InitBytes()        {            for(int i=0;i

 

转载于:https://www.cnblogs.com/cangyue080180/p/5905414.html

你可能感兴趣的文章
Linux-以指定用户运行redis
查看>>
Linux-socket的close和shutdown区别及应用场景
查看>>
初探Oracle全栈虚拟机---GraalVM
查看>>
移动端的点击滚动逻辑实现。
查看>>
xpath
查看>>
parted分区
查看>>
抛出错误
查看>>
Can't play local SWF file in Media Player
查看>>
图片标签img
查看>>
JavaScript语言中文参考手册.chm
查看>>
表哥的Access入门++以Excel视角快速学习数据库知识pdf
查看>>
day29 jq
查看>>
TC 配置插件
查看>>
关于异步reset
查看>>
索引优先队列的工作原理与简易实现
查看>>
SPOJ - DISUBSTR Distinct Substrings (后缀数组)
查看>>
并发编程简介
查看>>
第五次作业(最大公约数,最小公倍数)
查看>>
C++两水杯量出所需水量的小算法
查看>>
[面试真题] LeetCode:Same Tree
查看>>