使用位图创建屏幕录制器时的C#内存问题

使用位图创建屏幕录制器时的C#内存问题,c#,memory-leaks,bitmap,dispose,C#,Memory Leaks,Bitmap,Dispose,我正在开发一个屏幕录像机,但在位图和处理方面有问题。问题是公羊很快就被吃掉了。然后我开始怀疑使用位图创建屏幕记录器是否是一种不好的做法 我尝试了Bitmap.Dispose(),但随后得到一个System.ArgumentException:'参数无效。'错误 所以我有两个问题: 使用位图创建屏幕记录器是一种不好的做法吗 你知道如何解决内存问题吗 下面是一些代码,在使用videoFileWriter后,我尝试处理该图像,因为它没有用处,但仍然崩溃 谢谢你抽出时间 using (Bitmap bm

我正在开发一个屏幕录像机,但在位图和处理方面有问题。问题是公羊很快就被吃掉了。然后我开始怀疑使用位图创建屏幕记录器是否是一种不好的做法

我尝试了Bitmap.Dispose(),但随后得到一个System.ArgumentException:'参数无效。'错误

所以我有两个问题:

  • 使用位图创建屏幕记录器是一种不好的做法吗
  • 你知道如何解决内存问题吗
  • 下面是一些代码,在使用videoFileWriter后,我尝试处理该图像,因为它没有用处,但仍然崩溃

    谢谢你抽出时间

    using (Bitmap bmpImage = new Bitmap(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height))
            {
                graphics = Graphics.FromImage(bmpImage);
                graphics.CopyFromScreen(0, 0, 0, 0, bmpImage.Size);
                pictureBox1.Image = bmpImage;
    
                lblTime.Text = stopwatch.Elapsed.ToString();
                videoFileWriter.WriteVideoFrame(bmpImage);
            }
    

    您应该始终在使用图形后处理它。另外,您不必不断地重新创建位图和图形,您只需将它们用于代码将导致问题的每个帧,因为在运行它之后,
    pictureBox1.Image
    将包含一个已处理的图像。显然,在您使用完图像之前不应该对其进行处理。您应该始终在使用完图像后对其进行处理。另外,您不必不断地重新创建位图和图形,您只需将它们用于代码将导致问题的每个帧,因为在运行它之后,
    pictureBox1.Image
    将包含一个已处理的图像。显然,在您使用完该图像之前,不应该对其进行处理。