Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图形,在重新使用前进行处理?_C#_Dispose_Graphic - Fatal编程技术网

C# 图形,在重新使用前进行处理?

C# 图形,在重新使用前进行处理?,c#,dispose,graphic,C#,Dispose,Graphic,我想知道,在重用图形对象之前是否应该先处理它? 意思是我替换了它的价值: graphic=“createGraphic” 像这样的东西,我应该在那之前处理掉吗 下面是我使用它的示例代码: gmp.DrawImage(newImage, 0, 0); if (newImage.Size != panelm.Size) {

我想知道,在重用图形对象之前是否应该先处理它? 意思是我替换了它的价值:

graphic=“createGraphic”

像这样的东西,我应该在那之前处理掉吗

下面是我使用它的示例代码:

                        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,但这样做是一个很好的实践,尤其是在循环中创建对象时。