public void screenShot(string path)
    {
        var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                        Screen.PrimaryScreen.Bounds.Height,
                                        PixelFormat.Format32bppArgb);

        var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
        gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                                    Screen.PrimaryScreen.Bounds.Y,
                                    0,
                                    0,
                                    Screen.PrimaryScreen.Bounds.Size,
                                    CopyPixelOperation.SourceCopy);

        bmpScreenshot.Save(path, ImageFormat.Png);
    }

我正在使用此代码捕获计算机的屏幕。

但是今天我发现有一个叫做Bitmap.Dispose()的方法。

调用与不调用Dispose()的区别是什么?代码运行至关重要吗?

最佳答案

如果一个类型实现了IDisposable接口(interface),则一定要调用Dispose方法(显式地或通过using块)。



如果您不这样做,则析构函数(finalizer)负责释放资源。但是,它有一些缺点:

  • 不确定:终结器由GC在专用线程上执行。 GC决定何时运行它们。如果保留了对对象的引用(例如,在主应用程序窗口中),则在退出应用程序之前,终结器可能不会执行。
  • 开销:除非抑制了终结器,否则GC需要处理一些要破坏的对象。
  • 危险:如果终结器抛出异常,则认为它是致命的,将使整个应用程序崩溃。
  • 10-08 08:23