.net 为什么System.Drawing.Graphics.GetHdc()会增加内存使用率

.net 为什么System.Drawing.Graphics.GetHdc()会增加内存使用率,.net,vb.net,winapi,gdi,.net,Vb.net,Winapi,Gdi,此函数将图像绘制到位图类型的变量“backbuffer”的hdc中,该变量从函数返回。但是我不满意这个函数中内存的两大增长(我的图像很大): 排队 在第一线 Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH) 所以,我有一个问题: 为什么第二行会增加与我的图像大小相等的内存 为什么如果我在hdc中绘制,我会得到绘制的位图,然后返回(可能第一个是装箱,第二个是拆箱)? 如果我在hdc(针对具体绘图表面的图像的优化副本)中绘图,

此函数将图像绘制到位图类型的变量“backbuffer”的hdc中,该变量从函数返回。但是我不满意这个函数中内存的两大增长(我的图像很大):
排队

在第一线

Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH)
所以,我有一个问题:
为什么第二行会增加与我的图像大小相等的内存
为什么如果我在hdc中绘制,我会得到绘制的位图,然后返回(可能第一个是装箱,第二个是拆箱)?


如果我在hdc(针对具体绘图表面的图像的优化副本)中绘图,我的绘图是如何从优化副本恢复到原始的“backbuffer”位图的?

我认为这是因为当您创建Bitmap类的新实例,然后是g.hdc()强制它创建新的位图文件,该文件的大小与您在页面中声明的大小相同,因此这些内存使用峰值不是异常的,您不必担心它们


还要确保在函数末尾处理back buffer变量,以确保释放该对象使用的所有内存

为什么要处理g并将其放入using()中?但您期望的是什么?HDC实际上是一个针对具体绘图表面进行优化的位图。它的大小将等于该表面的大小。谢谢!如果我在hdc中绘图,我的绘图是如何从具体的绘图表面恢复到原始的“backbuffer”位图的?请注意编译器警告(无法访问的代码等)。@Alexandryumitskij Yes。
Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH)
Dim hdc As IntPtr = g.GetHdc()