[心得] 内存效能瓶颈

楼主: erspicu (.)   2015-12-31 17:34:28
全code....
http://paste.ofcode.org/3bw8ufpUwuPqT4xNfwUScZH
你觉得在你默认的猜测中
a.
color = (uint)((0xff << 24) | ((rgb555 & 0x1f) << 19) | ((rgb555 & 0x3e0)
<< 6) | ((rgb555 & 0x7c00) >> 7));
b.
color = rgb555_Table[rgb555 ];
你会觉得哪个速度比较快????
一个是好几次的bitwise计算算出结果..
一个是用index捞取array一个步骤
答案是 a 比较快... 不管是debug模式下或是一般模式
(现在一般电脑的情况...cpu效能超高,一般内存没追上cpu速度)
只是一般模式a快得更多
而pointer的写法 debug模式下,快一般array的操作方式一点,一般模式,
用指标跟ARRAY速度差不多(应该是一样)....
pointer在c#好像不只一种方式操作
参考
http://nbsoftsolutions.com/blog/high-performance-unsafe-c-code-is-a-lie
真的JIT下去优化后,很多概念似乎都不太准...
不过可以确定的是内存ARRAY的东西真的慢.....
有看过有一种处理技巧是用把array cop 到local变量去(array量少时),
进行后面的计算...
当然也看过一些project求好心切,都会把一些运算直接算出table....
如果用code好维护干净为由是ok的...但效率来说有可能会更慢
作者: Litfal (Litfal)   2015-12-31 18:31:00
a. 有例外是你会一直扫rgb555那个TABLE,但那个TABLE太大所以不太可能全部在cache里面,access到ram就是100ns左右的等级了这样的状况你就算在C里面写也一样,除非是写DSP ASSEMBLY

Links booklink

Contact Us: admin [ a t ] ucptt.com