Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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
Windows 在vb中调用.clone()太多次,会不会造成问题?_Windows_Vb.net_Visual Studio_Shallow Copy - Fatal编程技术网

Windows 在vb中调用.clone()太多次,会不会造成问题?

Windows 在vb中调用.clone()太多次,会不会造成问题?,windows,vb.net,visual-studio,shallow-copy,Windows,Vb.net,Visual Studio,Shallow Copy,我是一名嵌入式工程师,从未使用过windows或visual basic。 对于我当前的任务,我必须维护和改进一个在Windows上运行的测试系统,该系统是用Visual Studio C#编写的(我也没有使用该软件的经验)。 此项目使用一些用visual basic编写的库(所有遗留代码)。我发现了一个问题。我不能在这里直接复制代码,但因为有法律约束,但它是这样的: 'getter() dim temp as byte = global_data Array.reverse(temp); ..

我是一名嵌入式工程师,从未使用过windows或visual basic。 对于我当前的任务,我必须维护和改进一个在Windows上运行的测试系统,该系统是用Visual Studio C#编写的(我也没有使用该软件的经验)。 此项目使用一些用visual basic编写的库(所有遗留代码)。我发现了一个问题。我不能在这里直接复制代码,但因为有法律约束,但它是这样的:

'getter()
dim temp as byte = global_data
Array.reverse(temp);
...
这是一个getter函数。由于内部存在反向,因此每次调用后该函数的返回都不同,因为当temp更改时,全局_数据也会更改。我只能在奇数次呼叫后才能得到真正的值。之前的处理程序告诉我只调用函数一到三次。。。我认为这很愚蠢,通过添加一个.clone()来改变它,如下所示:

dim temp as byte = global_data.clone()
Array.reverse(temp);
它成功了:) 有很多类似的函数,所以我也会对它们进行类似的调整。 但由于我不熟悉这个系统的动态,我害怕以后再面对一个问题。例如,制作多个克隆会消耗我的RAM吗?那些克隆人能被摧毁吗?如果是,我必须摧毁它们吗?怎么用? 或者还有其他可能的问题吗? 还有别的办法吗


提前谢谢

要回答您的问题,不,多次调用
Clone
没有什么错。
只要被引用,克隆的字节数组就会占用内存,但这并不是被克隆的字节数组所独有的。推测克隆的字节数组正在传递给其他方法。一旦这些方法被执行,数组将有资格进行垃圾收集,系统将处理它。如果这段代码非常频繁地运行,可能有更好的方法比这些数组的分配和最终的垃圾收集更有效,但您不会在一段时间内使用克隆来“破坏”任何东西。

对于基本类型的变量,克隆方法复制其值,这需要堆栈为其分配空间。
值类型在堆栈中分配内存。它们有自己的生命周期,因此它们会自动分配和发布,而无需管理。因此,您不必担心占用大量内存,多次调用它不会带来麻烦。

global\u data
看起来像一个数组,而不是一个函数,除非它返回一个现有的字段值(但它看起来很愚蠢)。在方法中将数组克隆为
dim temp as byte()=DirectCast(global_data.clone(),byte())
会影响定义
temp
的方法,然后它将超出范围。将
选项严格设置在
上会有很大帮助,请尝试将其设置为默认值。我是否暗示这是一个函数?如果是这样,我可以纠正。它是一个全局变量。它在其他地方定义,但在这里调用,所以我认为它是全局的,就像C中的全局变量一样。我将检查该选项。谢谢