跪求大神指点vb.net 怎么释放变量在内存中的残留地址值呀

比如 这样 我调用aa后 我用ce看进程的内存地址里面就 拥有 "我是测试的" 这个字符
要怎么才能彻底释放掉这个字符呀 让内存所以地址里面不拥有这个字符
sub aa()
dim 变量=""
变量="我是测试的"
这里使用完成了准备释放
变量="
aaa = vbNullString
aaa = Nothing
End Sub

.net 有自己的资源回收机制GC。
如果变量不再使用了,所有引用该变量的其它变量也都没用了(dispose或者赋值为空了),那么这些没用的变量会定时的被GC自动回收,不需要自己去管理。
如果非要自己释放资源的话,可以使用 GC.Collect() 进行释放,但是并不能保证一次GC.Collect()就可以释放掉所有没有用的资源,可能要经过好几轮GC.Collect()才能释放干净。
所以还是建议不要手动回收了,让系统根据要求自动回收吧。追问

Sub aa()
Dim testChars = "我是来测试的"
For i = 0 To 10
GC.Collect()
Next
End Sub
我这样写的 还是没有释放掉用ce搜索 我是 还是能清楚的看到 我是来测试的 字符串

追答

这里你的testChars是不会被释放的,因为这个变量生命周期还没过呢。testChars在aa()中有效,aa还没有执行完毕,这个变量怎么会被释放呢?

追问

我在main 入口里面调用的 aa函数
Main()
aa() '我在这里调用的 aa子程序
'这里还调用了其他函数
MsgBox(1)'这里弹窗' 表示aa() 已经调用完成了呀 然后我在用ce搜索进程 一样能找到aa里面的变量字符
End Sub
求大佬给一个例子嘛 呜呜 跪谢

追答

你说的ce是那个cheat engine修改器?如果是这个的话,那我重新解释一下。
某个地址内存被你的程序释放了,代表这这个地址的内存已经标记为未使用,可以被其它变量使用了,GC回收的过程其实就是这个标记的过程(栈和堆的操作方式不一样,本问题中的是字符串,是堆操作。),并不是橡皮擦一样的抹掉里面值的过程。当有新的变量使用该地址的时候,这里面的值才会被覆盖掉。.net并不鼓励直接对地址进行操作,如果你非得要将该地址上的值手动抹去,需要使用unsafe代码,用指针操作。

温馨提示:答案为网友推荐,仅供参考
相似回答