A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mzh901024 中级黑马   /  2013-8-15 12:27  /  1011 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数组拷贝时,用Buffer.BlockCopy方法和CopyTo方法有什麼区别

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

4 个回复

倒序浏览
我们在实际使用过程中,应该使用哪种方式呢?

一一复制的方式最为灵活,您可以正着来,反着来,跳着来,爱咋来咋来;而CopyTo的灵活性最差,因为它只能复制数组的全部元素(事实上,CopyTo方法是ICollection接口的一部分);Array.Copy静态方法的作用是把原数组中连续的一段,复制到目标数组中去,如果您不需要蹦蹦跳跳地前进,用Array.Copy是比较理想辅助函数。而最后一个Buffer.BlockCopy,它其实并不是在复制“元素”,它复制的是“字节”——因此,在上面的代码中,BlockCopy的最后一个参数为length * 4,这是因为一个32位整数占4个字节,其实我要复制的并非是length个元素,而是要复制length * 4个字节。

回复 使用道具 举报
1,Array.Copy在CLR处理机制中最灵活,最强大,可装箱,拆箱复制,可加宽CLR基元类型,可内部判断实现了IFarmattable接口的兼容转换,当然这种强大方式必然会带来一定的性能损失。




2,Array.ConstrainedCopy 对复制要求严格,只能是同类型或者源数组类型是目标类型的派生元素类型,不执行装箱,拆箱,向下转换




3,Buffer.BlockCopy 则从本质上以字节为复制单位,这在底层语言C,C++的处理优势上,同理,效率之高可以理解。




当然如果对性能要求不高,Copy足矣,毕竟在上千次复制下,三者基本没消耗多少时间。使用时可根据项目需求斟酌选择!


评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
http://blog.sina.com.cn/s/blog_70e9c0d40100vy9v.html

找到一篇文章,  看看对你有帮助不.
回复 使用道具 举报 1 0
学习一下{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马