测试一下截取byte[]的效率

lifeixie 2007-04-16 04:02:16
还有更好的方法?谁来测试一下 截取复制byte[] 的效率。
byte[] bbb = new byte[360000];
byte[] bb = new byte[360000];

for (int i = 0; i < 360000; i++)
{
bbb[i] = (byte)i;
}

bbb复制给bb
Buffer.BlockCopy(bbb, 0, bb, 0, 360000); //系统自带的方法
Copy.(bbb, 0, bb, 0, 360000); //另一个查到的方法最下面写的方法

看看效率差多少。都测试一下,给100分,呵呵
Load Time: ?
Load Time: ?







/// <summary>
/// 使用指针复制字节数组
/// </summary>
public static void Copy(ref byte[] src, int srcIndex, ref byte[] dst, int dstIndex, int count)
{
if (src == null || srcIndex < 0 ||
dst == null || dstIndex < 0 || count < 0)
{
throw new System.ArgumentException();
}

int srcLen = src.Length;
int dstLen = dst.Length;
if (srcLen - srcIndex < count || dstLen - dstIndex < count)
{
throw new System.ArgumentException();
}

// The following fixed statement pins the location of the src and dst objects
// in memory so that they will not be moved by garbage collection.
fixed (byte* pSrc = src, pDst = dst)
{
byte* ps = pSrc;
byte* pd = pDst;

// Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
for (int i = 0; i < count / 4; i++)
{
*((int*)pd) = *((int*)ps);
pd += 4;
ps += 4;
}

// Complete the copy by moving any bytes that weren't moved in blocks of 4:
for (int i = 0; i < count % 4; i++)
{
*pd = *ps;
pd++;
ps++;
}
}
}
...全文
305 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
XMUMEEameng 2007-04-17
  • 打赏
  • 举报
回复
学习
diandian82 2007-04-17
  • 打赏
  • 举报
回复
class ClientApp
{
public static void Main(string[] args)
{
byte[] bbb = new byte[3600000];
byte[] bb = new byte[3600000];

DateTime now = DateTime.Now;
for (int i = 0; i < 3600000; i++)
{
bbb[i] = (byte)i;
}
TimeSpan ts = DateTime.Now - now;
Console.WriteLine("Time is {0}ms", ts.TotalMilliseconds);
}
}
15.6202ms

class ClientApp
{
public static void Main(string[] args)
{
byte[] bbb = new byte[3600000];
byte[] bb = new byte[3600000];

DateTime now = DateTime.Now;
Buffer.BlockCopy(bbb, 0, bb, 0, 3600000);
TimeSpan ts = DateTime.Now - now;
Console.WriteLine("Time is {0}ms", ts.TotalMilliseconds);
}
}

0ms
lifeixie 2007-04-17
  • 打赏
  • 举报
回复
自动动手就不用给你分了?!!!
walksnake 2007-04-16
  • 打赏
  • 举报
回复
这种帖子也就只能用来看热闹了。

自己动手,丰衣足食!
V68V6 2007-04-16
  • 打赏
  • 举报
回复
品热闹,顺便顶
whslovexyp 2007-04-16
  • 打赏
  • 举报
回复
观热闹
jcyluck 2007-04-16
  • 打赏
  • 举报
回复
凑热闹
llyzcy 2007-04-16
  • 打赏
  • 举报
回复
看热闹
CathySun118 2007-04-16
  • 打赏
  • 举报
回复
这里for (int i = 0; i < 360000; i++)
{
bbb[i] = (byte)i;
}

效率太低
不如直接Memcopy
Red_angelX 2007-04-16
  • 打赏
  • 举报
回复
第一个循环的效率肯定是不高的
Buffer.BlockCopy 和 Array.Copy的内部实现都是拷贝地址,速度比较快
最后一个unsafe的 感觉上稍微绕了点?
lifeixie 2007-04-16
  • 打赏
  • 举报
回复
机器太慢。靠,2005 196M SD内存
Red_angelX 2007-04-16
  • 打赏
  • 举报
回复
代码都有了 咋不自己测试?

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧