VB.NET 在 RAM 中处理位图不起作用

VB.NET Dispose Bitmap in RAM wont work

首先,我对 Visual Basic.NET 比较陌生,我在这里遇到了一个问题。 我开始编写一个 screen2gif 记录器。它的主要目的是有效的。但是,如果我记录的时间超过 15 到 20 秒,我的 ram 就会过载并超过 x32 位应用程序的 3.5 Gb 限制。问题是我创建的位图一遍又一遍地堆叠。

Private Function getBitmap(ByVal pCtrl As Control) As Bitmap
    Dim myBmp As Bitmap
    If myBmp IsNot Nothing Then
        myBmp.Dispose()
    End If
    myBmp = New Bitmap(pCtrl.Width, pCtrl.Height)
    Dim g As Graphics = Graphics.FromImage(myBmp)

    Dim p As New Point(pCtrl.Parent.Width - pCtrl.Parent.ClientRectangle.Width - 4, pCtrl.Parent.Height - pCtrl.Parent.ClientRectangle.Height - 4)
    g.CopyFromScreen(pCtrl.Parent.Location + pCtrl.Location + p, Point.Empty, myBmp.Size)
    Dim LocalMousePosition As Point
    LocalMousePosition = panelTranspacrency.PointToClient(Cursor.Position)
    Cursor.Draw(g, New Rectangle(New Point(LocalMousePosition.X, LocalMousePosition.Y), Cursor.Size))
    Return myBmp
    myBmp.Dispose()
    g.Dispose()

End Function

Private Sub tmrWork_Tick(sender As Object, e As EventArgs) Handles tmrWork.Tick
    counter += 1
    Dim bm As Bitmap
    bm = getBitmap(Me.panelTranspacrency)
    bm.Save(My.Settings.outputpath & "\temp\" & counter & ".png", Drawing.Imaging.ImageFormat.Png)
    bm.Dispose()
End Sub

这是我创建位图并将它们保存到磁盘的代码。 我提到我使用了 .Dispose 命令,但 ram 不会释放。

请看一下,给个提示。提前致谢。

改变

Dim g As Graphics = Graphics.FromImage(myBmp)

Using g As Graphics = Graphics.FromImage(myBmp)

并在 Return myBmp 之后放置 End Using。你应该对

做同样的事情
Using bm As Bitmap = getBitmap(Me.panelTranspacrency)

并删除所有明确的 .Dispose 调用。

文档 https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/using-statement