Java-自定义绘制声明性能

Java-自定义绘制声明性能,java,performance,swing,graphics2d,Java,Performance,Swing,Graphics2d,快点,是的,不是的,或者这并不重要: 我正在重写抽象按钮的绘制方法,我想知道是否 GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2); RoundRectangle2D r = new RoundRectangle2D.Float(0, 0, w, h, w/5, h/5); 类似的方法将影响性能与 GradientPaint gp; RoundRectangle2D r; 外面油漆,然后 gp = new Gra

快点,是的,不是的,或者这并不重要:

我正在重写抽象按钮的绘制方法,我想知道是否

GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
RoundRectangle2D r = new RoundRectangle2D.Float(0, 0, w, h, w/5, h/5);
类似的方法将影响性能与

GradientPaint gp;
RoundRectangle2D r;
外面油漆,然后

gp = new GradientPaint(0, 0, color1, 0, h, color2);
r = new RoundRectangle2D.Float(0, 0, w, h, w/5, h/5);
在画法里面

杰里米怎么样了

不是你要的,但最快的可能是在BuffereImage中绘制一次,然后在paint(或者更好的paintComponent)方法中显示BuffereImage。

Jeremy怎么样


不是你要的,但最快的可能是在BuffereImage中绘制一次,然后在paint(或者更好的paintComponent)方法中显示BuffereImage。

实例化一次或在必要时(例如大小更改)而不是多次。

实例化一次或在必要时(例如大小更改)而不是很多次。

在度量问题之前,请选择最易于维护的解决方案:-)

每个“优化”都需要额外的逻辑(aka:LOC)。每增加一条线路都有一个难以预测的维护价格。我的一般规则是它不会增加无法计算的成本


顺便说一句:无论如何,你不能做你的第一个选择,梯度是不可变的,所以每次大小改变时你都必须重新创建。在你测量问题之前,选择最可维护的解决方案:-)

每个“优化”都需要额外的逻辑(aka:LOC)。每增加一条线路都有一个难以预测的维护价格。我的一般规则是它不会增加无法计算的成本


顺便说一句:无论如何,你不能做第一个选择,渐变是不可变的-因此每次大小改变时你都必须重新创建。

+1不仅比我快,而且记得对
paintComponent
(并提到了BI!)发表评论。这两个建议都很好。不要吹毛求疵,但听起来你告诉了我更合适的绘制方法,但实际上没有回答性能问题=xBoth注释暗示这些正确的绘制方法比在循环中实例化GPs和RRs更有效。虽然我们本可以在这件事上说得更清楚些与“大小更改”相关,并使用
buffereImage
。BI是我通常进行自定义渲染的方式。只需要检查paint中的大小,如果与组件大小不同,则生成一个新的大小(与我的回答中提到的原始paint构造的原理相同)。直接问题的答案是:创建一次对象(与状态相同)似乎更有效,但这实际上取决于JVM。JVM通常足够聪明,可以优化这类事情,但这不是规范的一部分,可能依赖于JVM。不过最快的还是使用BuffereImage。+1不仅比我快,还记得对
paintComponent
(还提到了BI!)发表评论。这两个建议都很棒。不要吹毛求疵,但听起来你告诉了我更合适的绘制方法,但实际上没有回答性能问题=xBoth注释暗示这些正确的绘制方法比在循环中实例化GPs和RRs更有效。虽然我们本可以在这件事上说得更清楚些与“大小更改”相关,并使用
buffereImage
。BI是我通常进行自定义渲染的方式。只需要检查paint中的大小,如果与组件大小不同,则生成一个新的大小(与我的回答中提到的原始paint构造的原理相同)。直接问题的答案是:创建一次对象(与状态相同)似乎更有效,但这实际上取决于JVM。JVM通常足够聪明,可以优化这类事情,但这不是规范的一部分,可能依赖于JVM。但最快的方法还是使用BuffereImage。1+关于尺寸更改建议。1+关于尺寸更改建议。你应该覆盖paintComponent()而不是paint()。你应该覆盖paintComponent()而不是paint()。@Jeremy:她是尼罗河和秋千的女王。@Jeremy:她是尼罗河和秋千的女王。