测试类:
public class CopySpeedTest
{
//3M空间
private byte[] Bytes = new byte[3 * 1024 * 1024];
private int Len { get; set; }
public CopySpeedTest()
{
//使用一个图片文件的流
using (var fs = new FileStream(@"D:\temp\pic.jpg", FileMode.Open))
{
Len = fs.Read(Bytes, 0, (int)fs.Length);
}
}
public void ArrayCopy()
{
byte[] arr = new byte[Len + 100];
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//循环50000次
for (int i = 0; i < 50000; i++)
{
//复制,设置偏移为30
Array.Copy(Bytes, 0, arr, 30, Len);
}
stopwatch.Stop();
Console.WriteLine($"ArryCopy:{stopwatch.ElapsedMilliseconds}");
}
public void BlockBuffer()
{
byte[] arr = new byte[Len + 100];
Stopwatch stopwatch = new Stopwatch();
//循环50000次
stopwatch.Start();
for (int i = 0; i < 50000; i++)
{
//复制,设置偏移为30
Buffer.BlockCopy(Bytes, 0, arr, 30, Len);
}
stopwatch.Stop();
Console.WriteLine($"BlockBuffer:{stopwatch.ElapsedMilliseconds}");
}
}
主程序:
static void Main(string[] args)
{
int cnt = 1;
while (true)
{
Console.WriteLine($"+++++++++++第{cnt++}次+++++++++++");
CopySpeedTest test = new CopySpeedTest();
List<Task> tasks = new List<Task>();
//并行计算
tasks.Add(Task.Run(() => { test.BlockBuffer(); }));
tasks.Add(Task.Run(() => { test.ArrayCopy(); }));
Task.WaitAll(tasks.ToArray());
Console.WriteLine();
Console.ReadKey();
}
}
结果如下,仅供参考