Blue-Librahttp://blog.yesky.com/Blog/wallescai/复制地址

老蔡的VB之家

公告栏
前面两个BLOG都挂了,有的东西再也找不回来了. 这个是我最后滴希望咯.
控制面板
日历
<2007年10月>
SuMoTuWeThFrSa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
留言簿(2)
文章分类
文章档案
日记分类
图像相关知识
VB相关,一些比较少见的技巧
C编程相关
网络编程
最新评论

在做VB的图形处理时,我看到很多人使用了“VB模拟指针”的方法来加速计算。

对于这一点,我一直抱着怀疑的态度来看待。

如大家所知,VB中使用的并非真实数组(就像C里面的那种数组),VB使用的是基于COM的安全数组,或者更恰当的说:一个包含了真实数组的数据结构。

在对一个数据结构的内部元素的处理要慢于真实数组,因为多了一个定位的操作,指针要多一个位移才能指到真正的数组上面。

但是在VB中只有获取指针的方法而没有直接获得指针所指向的内存的内容的方法,它只能用COPYMEMORY这个API来代劳,而API调用也是有开销的,由此,我觉得在VB中,针对数值类型的数组的运算采用所谓的模拟指针对于加速数组运算并没有多少实际意义上的帮助。

看过超熊的那篇“VB-真是想不到系列”文章的朋友们或许注意到在该系列的最后,作者举了一个使用模拟指针加速数组运算的例子,并以此证明VB使用模拟指针加速数组运算的可行性。

但是请注意,超熊所举的那个例子是字符串类型操作,而并非数值类型,并且他也在文章中间声明了这一点。

目前我还没有写任何代码来验证我的上述说法,但是有能力的朋友不妨试试看。

这篇文章,我并没有得出什么结论,而只是抛砖引玉,提出了我长久以来的一个想法,希望各位朋友来一起讨论。

...

 

添加一个测试代码,证明了1维数组的性能比多维数组要提高30%或更多,含原代码,读者们可以自行查看:

3维数组vs1维数组性能.rar


作者:Walles Cai 阅读() 评论()  编辑 发表于:2007-07-27 15:45
相关内容
文章评论

  • # re: 关于使用“VB模拟指针”加速大量数据的处理速度的一点疑问。
  • 我知道楼上的朋友对图像还是有一定的研究的,但是我可以明确的告诉你用模拟指针的方法确实要比普通的手段做的图像处理方法快,你可以下载我用模拟指针写的一个DLL文件和你的imagecast比较下速度。
    下载地址:http://www.vbgood.com/viewthread.php?tid=53287&extra=page%3D1&page=4
    天极博友 | 2007-07-27 18:02
  • # re: 关于使用“VB模拟指针”加速大量数据的处理速度的一点疑问。
  • 它只能用COPYMEMORY这个API来代劳,而API调用也是有开销的

    不错调用API函数是要开销,但在做图像处理时,把DIBSECTION和模拟指针技术结合时只会调用2次COPYMEMORY,这个开销会大吗,当我们用模拟指针时,感觉就和C中的指针用法一样。
    天极博友 | 2007-07-27 18:04
  • # re: 关于使用“VB模拟指针”加速大量数据的处理速度的一点疑问。
  • 谢谢楼上的朋友,我会去看你的例子的.
    正如文中所说的,我"怀疑"VB使用模拟指针所带来的速度提升,但是并没有断然否认.
    其实从我本质上来说,任何能带来性能提升的东西都值得我去尝试.因此,从内心来说,我还是希望能通过这个讨论来学到一些我所欠缺的东西.
    天极博友 | 2007-07-28 17:28
  • # re: 关于使用“VB模拟指针”加速大量数据的处理速度的一点疑问。
  • 恩,在翻阅了Matthwe Curland的《高级VB编程》之后,了解到VB在处理多维数组时要比处理一维数组慢。
    同时我也明白了所谓的“VB模拟指针技术”原来就是做了这样的一个转换:将一个多维数组转换成一维数组进行运算和处理,最后再转换回多维数组。
    或许真的是我后知后觉,直到现在才明白这一点。
    因为之前的很多前辈们似乎都没有把这一点明白的说出来。

    因为实际在内存中的排列依然是一个一维的数组,所以在多维数组的数组元素定位的时候需要(至少,2维数组)多做一个乘法和一个加法,这就是慢的原因。

    所以明白了这一点之后,所谓的“用VB模拟指针技术提高速度”实在是不值一提了。
    无论是去修改SAFEARRAY,甚至是直接用COPYMEMORY将多维数组拷贝去一个等长的一维数组,都可以轻松做到(后者除了多用一倍的内存之外,在安全性和易懂性上要远胜于前者,用后面这个方法甚至都不需要了解什么叫做SAFEARAY)

    写在这里,希望能让更多的朋友看到。觉得有用的朋友帮顶一下吧,谢谢
    WallesCai | 2007-08-20 14:44
  • # re: 关于使用“VB模拟指针”加速大量数据的处理速度的一点疑问。
  • 增加了2倍速度
    天极博友 | 2007-09-21 15:44

    发表评论
    标题 *  
    姓名 *  
    内容 *  
       验证码: *       
           
    版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
    Powered by:

    Copyright © Walles Cai