我試圖讓方法在小於50毫秒內完成,但我似乎無法弄清楚如何提高方法的整體速度。我爲像素使用了一個對象,因爲我需要在壓縮數據時檢查null。java方法提高效率
public static Frame getFrame(Dimension d, Robot r, Rectangle s, Resolution rs)
{
int w = d.width;
int h = d.height;
BufferedImage b = r.createScreenCapture(s);
Pixel[] pixels = new Pixel[w * h];
for(int i = 0; i < w; i++)
{
for(int j = 0; j < h; j++)
{
pixels[j * w + i] = new Pixel(b.getRGB(i, j));
}
}
return new Frame(rs, pixels, true);
}
下面是像素級
public Pixel(int c)
{
if((c & 0xFF) == 0xA || (c & 0xFF) == 0xD)
c++;
if((c & 0xFF00) == 0xA00 || (c & 0xFF00) == 0xD00)
c += 0x100;
if((c & 0xFF0000) == 0xA0000 || (c & 0xFF0000) == 0xD0000)
c += 0x10000;
if((c & 0xFF000000) == 0xA000000 || (c & 0xFF000000) == 0xD000000)
c += 0x1000000;
color = c;
}
構造而這裏的Frame類
public Frame(Resolution res, Pixel[] pix, boolean ignoreCheck)
{
if(!ignoreCheck)
{
if(pix.length < res.getTotalPixels())
throw new NotEnoughPixelsException(res.getTotalPixels() - pix.length);
else if(pix.length > res.getTotalPixels())
throw new TooManyPixelsException(pix.length - res.getTotalPixels());
}
resolution = res;
pixels = pix;
}
這個問題似乎是脫離主題,因爲它是關於代碼審查 - http://codereview.stackexchange.com/ – lifetimes
根據我的經驗,解決性能問題的最佳方法是獲取一個分析器,並查看JVM真的在花時間。其他的一切都是猜測的工作,你猜測,做很多工作,然後發現你的猜測是錯誤的。啊。分析器是你的朋友。 –
我不同意這是脫離主題。有一個具體的問題「我如何得到這種改進的表現」,答案表明可以給出具體的迴應。這不是一般的「這個代碼如何改進」。我同意它正在推動一些界限。 :) –