Performance j2me:x27的作用是什么;g、 clipRect()和#x27;在速度上?

Performance j2me:x27的作用是什么;g、 clipRect()和#x27;在速度上?,performance,java-me,midp,lcdui,clip,Performance,Java Me,Midp,Lcdui,Clip,我正在j2me中开发,并使用canvas绘制一些图像 现在,我的问题是:下面的示例代码在绘图速度上有什么不同 剪切区域矩形后绘制: g.clipRect(x, y, myImage.getWidth(), myImage.getHeight()); g.drawImage(myImage, x , y, Graphics.TOP | Graphics.LEFT); g.setClip(0, 0, screenWidth, screenHeight); 不带剪辑的绘图: g.drawImag

我正在j2me中开发,并使用canvas绘制一些图像

现在,我的问题是:下面的示例代码在绘图速度上有什么不同

剪切区域矩形后绘制:

g.clipRect(x, y, myImage.getWidth(), myImage.getHeight());

g.drawImage(myImage, x , y, Graphics.TOP | Graphics.LEFT);

g.setClip(0, 0, screenWidth, screenHeight);
不带剪辑的绘图:

g.drawImage(myImage, x, y, Graphics.TOP | Graphics.LEFT);

第一个更快吗?我经常在屏幕上画画。

这几乎肯定会因平台而异,这取决于你实际画了多少


我建议您自己通过记录每秒绘制的次数或绘制方法的平均持续时间来测量性能,并在屏幕上绘制此结果。

在任何平台上绘制不带剪辑的图像都应该更快,原因很简单,您不调用两种剪辑方法。但我可能会问,为什么一开始就使用clip?
当同一文件中有动画精灵或图标变体时,通常使用剪辑。在这种情况下,可以为每个帧/图标创建一个文件。它将增加jar文件大小,并使用更多堆空间在内存中保存这些图像,但绘制速度会更快。

您的问题的直接答案恐怕是——因为您似乎从错误的方向处理问题

问题是,剪裁API不是出于性能考虑/优化的目的。您可以在API文档()中找到它的全部用途,它没有说明任何与性能影响相关的内容:

剪辑 剪辑是图形对象目标中的一组像素,可通过图形渲染操作进行修改

每个
图形
对象有一个剪辑。通过图形操作修改的唯一像素是位于剪辑中的像素。剪辑外的像素不会被任何图形操作修改

提供了将当前剪辑与给定矩形相交以及直接设置当前剪辑的操作

试图使用剪裁API来考虑假想的性能将使您的代码成为未来维护人员难以理解的噩梦。注意,这个未来的维护者可能就是你自己,仅仅几周/几个月/几年后——我自己的代码在不久前没有明确理解的意图的情况下被打断了鼻子——相信我,这和弄乱其他人编写的糟糕代码一样痛苦


请不要误解我的意思——在某些特定情况下,剪辑可能会对特定设备的性能产生重大影响——为什么不呢?考虑到MIDP实现的多样性,一切都是可能的。知道吗?它甚至有可能对其他设备产生相反的影响,为什么不呢

如果(如果)发生了这种情况,如果(如果)您将以某种方式获得特定性能影响的清晰、可靠、经过测试和证明的理由-然后(然后),继续,实施任何必要的技巧以达到所需的性能,无论它们多么反常()。不过,在那之前,不要再想任何可能出现在你脑海中的毫无根据的假设

在那之前。。。只是滴它

开发人员喜欢优化代码,并且有很好的理由。它是如此令人满意和有趣。但知道什么时候进行优化要重要得多。不幸的是,开发人员通常对应用程序中的性能问题的实际位置有着可怕的直觉。。。大多数性能调整都让我想起了一个老笑话,一个家伙在厨房里找钥匙,尽管他在街上丢了钥匙,因为厨房的光线更好。。。()


考虑到在本例中,您的绘图是一个
drawImage
调用,实际上是一个blit,这可能会产生接近于零的差异,除非图像宽度和屏幕大小相差很大。