C# 图形,在重新使用前进行处理?
我想知道,在重用图形对象之前是否应该先处理它? 意思是我替换了它的价值: graphic=“createGraphic” 像这样的东西,我应该在那之前处理掉吗 下面是我使用它的示例代码:C# 图形,在重新使用前进行处理?,c#,dispose,graphic,C#,Dispose,Graphic,我想知道,在重用图形对象之前是否应该先处理它? 意思是我替换了它的价值: graphic=“createGraphic” 像这样的东西,我应该在那之前处理掉吗 下面是我使用它的示例代码: gmp.DrawImage(newImage, 0, 0); if (newImage.Size != panelm.Size) {
gmp.DrawImage(newImage, 0, 0);
if (newImage.Size != panelm.Size)
{
panelm.Invoke((MethodInvoker)delegate { panelm.Size = newImage.Size; });
this.Invoke((MethodInvoker)delegate { this.Size = newImage.Size; });
gmp.Dispose();
gmp = panelm.CreateGraphics();
};
这是一个while循环,在while之前,我做一个m。
但是,我从不在循环中处理它,我只是一直重复使用它,除非大小不匹配
然后我需要重新创建它(否则它会变大/变小)
但现在的问题是,我应该先处理,还是只使用creategraphic
还有,这里的问题是。我不能在gmp上使用“使用”。因为如果我这样做,我只有两种可能
1:在while循环之前创建它,并重复使用它,直到while循环结束(这意味着,我永远无法更改它)。
2:在while循环中创建它(这意味着我认为是浪费的每个循环都会重新创建它)
谢谢所以您是在询问是否应该在给它一个新值之前调用它的
Dispose()
Graphics gmp = panelm.CreateGraphics();
//do work
gmp.Dispose();
gmp = panelm.CreateGraphics();
对
Graphics gmp = panelm.CreateGraphics();
//do work
gmp = panelm.CreateGraphics();
作为一种良好的做法,您应该在完成后调用
Dispose()
;尽管垃圾收集器会在某个时候自动清理它(如果您不这样做的话),因此您不会以任何方式泄漏资源。所以您是在询问是否应该在给它一个新值之前调用它的Dispose()
Graphics gmp = panelm.CreateGraphics();
//do work
gmp.Dispose();
gmp = panelm.CreateGraphics();
对
Graphics gmp = panelm.CreateGraphics();
//do work
gmp = panelm.CreateGraphics();
作为一种良好的做法,您应该在完成后调用
Dispose()
;尽管垃圾收集器会在某个时候自动清理它(如果您不这样做的话),因此您不会以任何方式泄漏资源。引用类型变量不包含对象,而是标识它们;将它们视为对象ID可能会有所帮助。如果对CreateGraphics
的调用返回“Object#4872”,则有必要确保有东西将对Object#4872调用Dispose
。如果someVariable
恰好包含“Object#4872”,那么说someVariable.Dispose
实际上不会对someVariable
做任何事情,而是会对Object#4872调用Dispose
。如果代码在调用Dispose
之前覆盖变量,它将无法知道需要调用其Dispose
方法的对象。引用类型变量不保存对象,而是识别它们;将它们视为对象ID可能会有所帮助。如果对CreateGraphics
的调用返回“Object#4872”,则有必要确保有东西将对Object#4872调用Dispose
。如果someVariable
恰好包含“Object#4872”,那么说someVariable.Dispose
实际上不会对someVariable
做任何事情,而是会对Object#4872调用Dispose
。如果代码在调用Dispose
之前覆盖变量,它将无法知道需要调用哪个对象的Dispose
方法。是。是的,当我处理完它后,我会处理掉它。但是我应该把它放在那里吗?TCPClient也是一样,我不知道我是否应该。Close before=new TCPClient()。是的,您应该在为其分配新值之前处理它。很好,为什么是这样,很高兴知道为什么我不应该在处理之前分配,因为我在下一行中分配了它:)如果您不调用dispose,图形对象将保留其资源一段时间(直到垃圾收集器出现)。这意味着您的应用程序将使用比所需更多的内存。如果只创建一个或两个图形对象,您可能不会注意到它,但是如果调用CreateGraphics太多次,内存使用可能会变得明显。是的,确实如此。是的,当我处理完它后,我会处理掉它。但是我应该把它放在那里吗?TCPClient也是一样,我不知道我是否应该。Close before=new TCPClient()。是的,您应该在为其分配新值之前处理它。很好,为什么是这样,很高兴知道为什么我不应该在处理之前分配,因为我在下一行中分配了它:)如果您不调用dispose,图形对象将保留其资源一段时间(直到垃圾收集器出现)。这意味着您的应用程序将使用比所需更多的内存。如果只创建一个或两个图形对象,您可能不会注意到,但是如果调用CreateGraphics太多次,内存使用情况可能会变得明显。您应该始终处理包含本机资源的对象<代码>图形,套接字
s,任何东西。如果一个类实现了IDisposable接口,您可以确定这是有原因的。C#允许您不关心GC,但这样做是一种很好的做法,尤其是在循环中创建对象时。您应该始终处理包含本机资源的对象<代码>图形,套接字
s,任何东西。如果一个类实现了IDisposable接口,您可以确定这是有原因的。C#允许您不关心GC,但这样做是一个很好的实践,尤其是在循环中创建对象时。