Существует ли шаблон использования, который не зависит от IDisposable? - PullRequest
3 голосов
/ 01 мая 2009

Я хочу создать внутреннюю систему обмена сообщениями, которая может сообщать мне продолжительность вызова некоторого кода. Я думал о простоте использования, чтобы класс SystemMessage реализовал IDisposable.

Я бы установил метку времени во время конструктора SystemMessage, и если бы был вызван Dispose, я мог бы определить продолжительность.

Проблема в том, что я не хочу иметь объект GC'ed. Я хочу, чтобы он оставался как часть MessageCollection.

Есть ли в C # другая конструкция, которая может дать мне удобство использования оператора Statement, не наступая на предполагаемую функцию IDisposable.

Using (message = Collection.CreateNewMessage("FileDownlading"))
{
    // I wonder how long it is taking me to download this file in production?
    // Lets log it in a message and store for later pondering.
    WebClass.DownloadAFile("You Know This File Is Great.XML");
}
// we fell out of the using statement, message will figure out how long
// it actually took to run.
// This was clean and easy to implement, but so wrong?

Ответы [ 12 ]

0 голосов
/ 01 мая 2009

Оператор using предназначен для удаления объектов, когда вы закончите с ними. Идея удерживать объект после его уничтожения не совсем предназначена. Вы можете попробовать сделать что-то простое, например:

message = Collection.CreateNewMessage("FileDownlading");
DateTime dtStart = DateTime.Now;
WebClass.DownloadAFile("You Know This File Is Great.XML");
DateTime dtEnd = DateTime.Now;

// perform comparison here to see how long it took.

// dispose of DateTimes
dtStart = dtEnd = null;
0 голосов
/ 01 мая 2009

Не совсем. Самое близкое, что вы можете получить, - это что-то вроде этого (что происходит в любом случае под оператором using ():)

var message = Collection.CreateNewMessage("FileDownloading")

try
{
    WebClass.DownloadAFile("You Know This File Is Great.XML");
}
finally
{
    message.HowLongHaveIBeenAlive();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...