最新评论

共2页: 1 2 下一页 
amingo 2008-11-03 15:03
3楼以下可全部删除!
fftt 2008-10-27 12:47
@hjx
是的,进行图像处理的话,最好使用指针,速度比不用指针又要快很多。
谢慧琦 2008-10-27 11:57
这是一个著名的性能优化建议!
三 2008-10-27 11:31
改成用指针运算更快些,每次做完一个运算指针递增就可以了。不用在每次循环里面都计算下标的。

更进一步,考虑一下CPU的内部cache的使用方式。一次处理可以让CPU用内部cache就能完成。
chgBlog 2008-10-27 11:12
问题不在访问对象的属性,fftt说的很有道理。
John Rambo 2008-10-27 10:49
刚才看了一下语言规范,确实是想搂主说得那样。for(;a.Prop;)不会因为release就自动变成p=Prop;for(;p;)
这是违反语义的。
hjx 2008-10-27 10:33
public unsafe void Binary()
{
int h = originalImage.Height;
int w = originalImage.Width;
int total=w*h;
int* p=null;
for (int i= 0; i< total; i++,p++)
{
*p = *p < 128 ? 1 : 0;
}
}
这样使用指针效率最高!!!
菜菜灰 2008-10-27 10:11
for (int j = 0; j < originalImage.Height; j++)

每循环一次都要去获取一次originalImage.Height,速度当然慢
中华小鹰 2008-10-27 10:09
@暗香浮动
是存储在堆上的。
John Rambo 2008-10-27 10:09
@Touchsoft
怎么变成单层?

搂主遇到的这个现象很奇怪,我记得clr via c#上说编译器会处理这种在循环判断条件中访问属性的情况。
Touchsoft 2008-10-27 09:33
把双层for变成单层for。
zzzZZ 2008-10-27 09:31
这就是C++里没有属性的原因
暗香浮动 2008-10-27 09:29
对象的属性.
如果是整形之类的.是存储在堆上的还是存储在栈上的呢.
非主流程序员 2008-10-27 09:27
如果属性里面直接是 return _height;呢?估计也差不多。
可能是你属性里面有对象的新建、修改等操作,而不是直接返回int。你可以试着优化一下属性,设个_height临时保存值,如果已经赋值(!=0)那么可以直接返回。这样跟int x= xxx.Height效率一样的。 从面向对象的角度来说,应该优化属性而不是调用属性的方法。
很忙的闲人 2008-10-27 09:11
你调试的时候都知道,你访问属性,还要跳转到get里面一下,调试都多了1~2步,而直接访问当前过程里面的一个变量,过程都少了1步啦。你循环多了,那就是N多步啦!乱吹的,别信。
alonesword 2008-10-27 08:49
不错!注意细节问题进行性能优化,不错不错,够细心的。

既然说了这里,我就再提醒一下,你可以将 双层 for 循环解开看看,速度会更快的。
jillzhang 2008-10-27 02:13
release应该有所optimizated的,所以建议在released下测试看看
Nickelzhang 2008-10-27 02:05
@shawnliu
94,曾经就听说过效率是一毫秒一毫秒出来的,最终要处理一批图,速度不能太慢啊。我看也差不多,get内部的附加操作占用时间了,谢谢你啦。
shawnliu 2008-10-27 01:56
@Nickelzhang
主要原因显然应该我楼上那家伙说的原因 我主要说你的代码可以继续优化 因为看你的描述仿佛对Performance还有点要求 要追求perfect code就得注意细节
Nickelzhang 2008-10-27 01:51
@shawnliu
这个方法我用过,实际来看差不多,我这个代码是为了描述问题简化的,其实中间还有很多判断,但是都用到那个属性访问了,所以该了以后提速显著
共2页: 1 2 下一页