2012-10-31 38 views
0

我想做一個速度測試,看看代價高昂的Graphics.FromImage()是多少。VB.NET「使用」錯誤

要做到這一點,我首先做了一個循環,我反覆調用Graphics.FromImage。 現在在我的第二個測試中,我只做了一次,但現在我得到一個錯誤。

m_Buffer = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb) 
    m_g = Graphics.FromImage(m_Buffer) 

    For i As Integer = 0 To 1000 
     Using m_g 
      m_g.FillEllipse(New SolidBrush(Color.Blue), 0, 0, 100, 100) 
     End Using 
    Next i 

關於第(i = 1)我得到錯誤 「無效參數」 上線m_g.FilleEllipse 有誰知道爲什麼嗎?

回答

1

也許你應該這樣做

.... 
Using m_g 
    For i As Integer = 0 To 1000 
     Using blue As New SolidBrush(Color.Blue) 
      m_g.FillEllipse(blue, 0, 0, 100, 100) 
     End Using 
    Next i 
End Using 
.... 

到圖形對象的引用,應設置在環路後,內循環參考SolidBrush。

編輯:

使用是非常重要的。特別是在處理系統資源時,如圖形句柄或數據庫連接。使用是try/finally子句的替代品,在最終使用中自動處理您聲明的對象。這可以確保即使在例外的情況下,您的系統資源也能正確處理,而無需等待垃圾收集器通過。
在上面的循環中,將立即生成1000個SolidBrush對象(以及底層系統圖形句柄),並且不會對系統圖形內存施加壓力。

+0

你能解釋一下Using的用法嗎?這是否意味着幫助自己?我想這並不是真的需要,因爲VB.NET會在子結尾處理自己的配置。 – tmighty

1

我認爲這將是因爲Graphics.FromImage是一個靜態調用和包裝使用語句試圖調用dispose,這意味着下一次它不能被使用。

+0

謝謝你,幫助。 – tmighty