2012-08-25 37 views
0

我在應用程序中遇到問題,它需要大量內存優化,但現在我必須提供應用程序的測試版本,我需要像「ramrush」這樣的API可以在沒有任何可執行文件的情況下從我的應用程序中調用,Ramrush現在正在神奇地解決我的問題,但是我無法使用我的應用程序提供它。像RAMRush一樣的Ram優化SDK,用於圖像處理

+2

* Ram優化SDK *它被稱爲程序員。 –

+0

你是對的,但我沒有時間優化堆和非優化的圖像處理代碼堆,我會做很快的功能優化,但我需要一些東西來拯救我今天提供的測試版本。 –

+0

我可以問你使用什麼圖像處理框架?有框架允許內存優化,並且有框架沒有。 – rwong

回答

1

爲了解決業務方案的迫切需求(即使它有點晚了今天)


有在內存優化兩級圖像處理代碼。

  • 在更簡單的級別上,程序員試圖儘可能經常和儘可能早地刪除不再需要的圖像對象(即每行代碼後)。
  • 更困難的級別需要實現一些圖像處理步驟作爲高效內存管道。

一個例子:

class RgbToGray : ImageSource 
{ 
    private ImageSource m_src; 
    public RgbToGray(ImageSource src) 
    { 
     m_src = src; 
    } 
    public void GetPixels(int x0, int y0, int rectWidth, int rectHeight, out Pixel[,] result) 
    { 
     // omitted: validate parameters 
     Pixel[,] temp = new Pixel[rectHeight, rectWidth]; 
     m_src.GetPixels(x0, y0, rectWidth, rectHeight, out temp); 
     for (int y = y0; y < y0 + rectHeight; ++y) 
     { 
      for (int x = x0; x < x0 + rectWidth; ++x) 
      { 
       result[y,x] = SomeCalculation(temp[y,x]); 
      } 
     } 
    } 
}; 

在該示例中,執行RgbToGray的按需的圖像處理,而不需要它自己的永久存儲器使用,而是依賴於臨時緩衝器中。爲了使這個實現起作用,調用者必須調用GetPixels,使其具有必須小於整個圖像大小的特定「緩衝區粒度」,以便實現節省內存的效果。

(具體框架我已經記Windows Imaging Component,但類似的想法可以在許多其他框架中找到諸如OpenCV's MatExpr模板。)

顯然,並不是所有的框架允許這樣的優化。

+0

最好的答案主要針對Microsoft DebugDiag,它是awwww.com –