Достаточно ли избавиться от этого объекта? или мне нужно сделать больше? - PullRequest
1 голос
/ 30 ноября 2008

У меня есть этот код: -

using (System.Security.Cryptography.SHA256 sha2 = 
    new System.Security.Cryptography.SHA256Managed())
{ .. }

Нужно ли вводить эту строку кода, просто ДО того, как я оставлю эту область утилизации ... или уже утилизирует "вызов", который уже.

sha2.Clear();

Ответы [ 5 ]

3 голосов
/ 30 ноября 2008

Поскольку AFAIK метод Clear () просто вызывает Dispose, блока using должно быть достаточно, чтобы обеспечить освобождение используемых ресурсов.

1 голос
/ 30 ноября 2008

Если вы посмотрите с помощью Reflector, вы увидите, что Clear просто вызывает Dispose, поэтому в вашем примере нет необходимости вызывать Clear.

Многие классы фреймворка предлагают Close / Clear / Wh независимо от Dispose, чтобы сделать использование немного более простым.

1 голос
/ 30 ноября 2008

ИМХО, если вызова Dispose () недостаточно для удаления объекта, либо в коде есть серьезная ошибка или серьезная ошибка в дизайне. Так что не беспокойтесь о каких-либо дополнительных шагах в вашем собственном коде!

0 голосов
/ 30 ноября 2008

Dispose () достаточно хорош.

Я не уверен, как работает .NET. Но вызов функции сложения или "set null" ухудшит производительность в Java.

CLR / Java VM сможет (и должна) очистить все разыменованные управляемые объекты от «корней» в следующей сборке мусора.

PS. Dispose () очищает «неуправляемые» ресурсы, чтобы улучшить производительность GC, так как он не ожидает завершения потока Finallizer.

0 голосов
/ 30 ноября 2008

И общий полезный совет - не забывайте, что источник для всего этого материала доступен в настоящее время - он часто помогает мне ответить на этот вопрос, без необходимости угадывать или делать выводы.

Это хорошее место для начала: http://www.codeplex.com/NetMassDownloader

...