读书人

将小弟我的源代码移植到自制组件中后变

发布时间: 2012-02-02 23:57:14 作者: rapoo

将我的源代码移植到自制组件中后变慢?
我有一段源代码,较长,就不贴出来了,是用来作屏幕差异传输的,其中有一段


...
j := 0;
while j <= NewBmp.Height-1 do begin
p1 := NewBmp.scanline[j];
p2 := OldBmp.scanline[j];
xs := 0; // 用来测试当前行是否有不同的像素
for i := 0 to NewBmp.Width-1 do begin
if (P1[i] <> P2[i] then begin
inc(xs);
break; // 只要有不同就跳出当前行扫描
end;
end;
if xs > 0 then begin
...
// 复制自当前行开始10行的图像到临时位图,最后加入到差异数据流中
...
inc(j,9); // 连同下面的inc(j) 正好跳过10行,加快速度
end;
inc(j);
end;
...


将这段代码放在一个unit中仅当作一个过程处理新旧两幅图片时速度很快,平均一秒能有十几幅,能满足屏幕监控的要求,我又把这段代码放到一个自制的组件里,当作该组件的一个过程,又为该组件添加了新图片和旧图片两个成员,
再用这个组件进行同样的程序开发,速度就慢了很多,平均要十几到二十秒才能有一幅图片
后来我又测试了注释掉几行代码,发现只要注释掉 for 循环内的任一条语句都能显著加快速度,去掉整个 for 循环速度就很快了,这是为什么呢?


[解决办法]
编译优化引起的?看看控件的编译选项及程序的编选项,特别是优化的部分.

读书人网 >.NET

热点推荐