这两种不同的实现如何影响性能或如何在内存中分配对象?
using (ICryptoTransform encryptor = AES.CreateEncryptor())
{
byte[] cipherBytes = encryptor.TransformFinalBlock(clearBytes, 0, clearBytes.Length);
}
byte[] cipherBytes = AES.CreateEncryptor().TransformFinalBlock(clearBytes, 0, clearBytes.Length);
答案 0 :(得分:0)
每当对象使用非托管资源时,您需要处置资源,以便其他程序可以使用该资源 - Windows无法删除此文件,因为它正由另一个程序使用,这是您在不释放程序所持资源时看到的错误示例。虽然在你的using
代码中有一个性能缓慢的因素 - 几乎不可察觉 - 但这是一个更好的代码,只要它还可以处理你的对象持有的任何资源。尽管如此,它确实创建了一个变量,而该变量是.Dispose()
被调用的变量。
在第二个代码中,您需要手动调用.Dispose()
函数 - 但是在什么?你根本没有存储变量。您可以创建该函数,以下代码将尝试来模仿第一个块中发生的事情,
// Create and use.
var encryptor = AES.CreateEncryptor();
byte[] cipherBytes = encryptor.TransformFinalBlock(clearBytes, 0, clearBytes.Length);
// This function is called by "using" automatically.
encryptor.Dispose();
还有一些其他有用的资源,对于C#编程的最佳实践,我建议你给他们一个好的想法并看看它们。 :)