using语句与不存储对象之间有什么区别

时间:2017-04-13 16:22:38

标签: c#

这两种不同的实现如何影响性能或如何在内存中分配对象?

using (ICryptoTransform encryptor = AES.CreateEncryptor())
{
    byte[] cipherBytes = encryptor.TransformFinalBlock(clearBytes, 0, clearBytes.Length);
}


byte[] cipherBytes = AES.CreateEncryptor().TransformFinalBlock(clearBytes, 0, clearBytes.Length);

1 个答案:

答案 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#编程的最佳实践,我建议你给他们一个好的想法并看看它们。 :)

using Statement (C# Reference)
Uses of using in C#