作者erspicu (.)
看板C_Sharp
标题[心得] 记忆体效能瓶颈
时间Thu Dec 31 17:34:28 2015
全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的...但效率来说有可能会更慢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.121.19.98
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1451554473.A.0D0.html
1F:→ Litfal: a. 有例外是你会一直扫rgb555那个TABLE,但那个TABLE太大 12/31 18:31
2F:→ Litfal: 所以不太可能全部在cache里面,access到ram就是100ns左右 12/31 18:55
3F:→ Litfal: 的等级了 12/31 18:55
4F:→ Litfal: 这样的状况你就算在C里面写也一样,除非是写DSP ASSEMBLY 12/31 18:59
※ 编辑: erspicu (61.70.74.143), 12/31/2015 19:54:17