在做VB的图形处理时,我看到很多人使用了“VB模拟指针”的方法来加速计算。
对于这一点,我一直抱着怀疑的态度来看待。
如大家所知,VB中使用的并非真实数组(就像C里面的那种数组),VB使用的是基于COM的安全数组,或者更恰当的说:一个包含了真实数组的数据结构。
在对一个数据结构的内部元素的处理要慢于真实数组,因为多了一个定位的操作,指针要多一个位移才能指到真正的数组上面。
但是在VB中只有获取指针的方法而没有直接获得指针所指向的内存的内容的方法,它只能用COPYMEMORY这个API来代劳,而API调用也是有开销的,由此,我觉得在VB中,针对数值类型的数组的运算采用所谓的模拟指针对于加速数组运算并没有多少实际意义上的帮助。
看过超熊的那篇“VB-真是想不到系列”文章的朋友们或许注意到在该系列的最后,作者举了一个使用模拟指针加速数组运算的例子,并以此证明VB使用模拟指针加速数组运算的可行性。
但是请注意,超熊所举的那个例子是字符串类型操作,而并非数值类型,并且他也在文章中间声明了这一点。
目前我还没有写任何代码来验证我的上述说法,但是有能力的朋友不妨试试看。
这篇文章,我并没有得出什么结论,而只是抛砖引玉,提出了我长久以来的一个想法,希望各位朋友来一起讨论。
...
添加一个测试代码,证明了1维数组的性能比多维数组要提高30%或更多,含原代码,读者们可以自行查看:
3维数组vs1维数组性能.rar