但是,虽然纯文本密码稍后分配给密码,但此变量永远不会从内存中清除



定义密码,即 指定为包含用户密码。但是,虽然明文密码稍后分配给密码,但这 变量永远不会从内存中清除

var password = ConfigurationManager.AppSettings["xyz"].ToString();

我该怎么做才能为此删除堆检查?

有两个选项可以从内存中手动删除字符串内容:

选项 1:手动垃圾回收

保存密码的字符串对象消耗的内存没有什么特别之处。要使用手动垃圾回收从内存中删除对象,请删除对密码变量的所有引用,然后调用 System.GC.Collect()。

选项 2:使用 System.Security.SecureString

SecureString 有一个 Dispose 方法,该方法将在您完成字符串处理后释放它消耗的内存。我自己还没有尝试过这个,但你应该能够做这样的事情:

// Create a SecureString
SecureString password = new SecureString();
foreach (char c in ConfigurationManager.AppSettings["xyz"].ToString())
{
password.AppendChar(c);
}
// Use password
this.SomeMethod(password);
// Remove password
password.Dispose();

最新更新