首页 > 解决方案 > 在vb中多次调用.clone(),会不会有什么问题?

问题描述

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

'getter()
dim temp as byte = global_data
Array.reverse(temp);
...

这是一个吸气剂功能。由于里面有一个reverse,所以每次调用这个函数的返回值都是不同的,因为当temp改变时,global_data也改变了。而且我只有在奇数次调用后才能获得真正的价值。以前的处理程序告诉我只调用一次或三次函数......我认为这很愚蠢,并通过添加 .clone() 来改变它,如下所示:

dim temp as byte = global_data.clone()
Array.reverse(temp);

它奏效了 :) 有很多这样的功能,所以我也要对它们进行类似的调整。但由于我不熟悉这个系统的动力学,我怕以后会遇到问题。例如,可以使多个克隆消耗我的 RAM 吗?那些克隆可以被摧毁吗?如果是,我必须销毁它们吗?如何?或者还有其他可能的问题吗?还有其他方法可以做到这一点吗?

提前致谢!

标签: windowsvb.netvisual-studioshallow-copy

解决方案


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


推荐阅读