Результаты поиска
Практическое применение System.WeakReference
Я понимаю, что делает System.WeakReference , но то, что я не могу понять, - это практический пример того, для чего он может быть полезен. Сам класс мне кажется, ну, в общем, халтурой. Мне кажется, что есть и другие, лучшие способы решения проблемы, когда в примерах, которые я видел, используется WeakReference. Каков канонический пример того, где вы действительно должны использовать WeakReference? Разве мы не пытаемся уйти дальше от такого типа поведения и использования этого класса?
Принудительное выполнение вызова требуемой функции
У меня есть класс "Status" в C#,, используемый следующим образом:
Status MyFunction()
{
if(...) // something bad
return new Status(false, "Something went wrong")
else
return new Status(true, "OK");
}
Вы поняли идею. Все абоненты MyFunction должны проверить возвращенный статус:
Status myStatus = MyFunction();
if ( ! myStatus.IsOK() )
// handle it, show a message,...
Ленивые абоненты, однако, могут игнорировать статус.
MyFunction(); // call function and ignore returned Status
или
{
Status myStatus = MyFunction();
} // lose all references to myStatus, without calling IsOK() on it
Можно ли сделать это невозможным? например, исключение броска
В общем : можно ли написать класс C#, на котором вы должны вызвать определенную функцию?
В версии C++ класса Status я могу написать тест на некотором частном bool bIsChecked в деструкторе и позвонить в некоторые колокола, когда кто-то не проверяет этот экземпляр.
Что такое эквивалентный вариант в C#? Я где-то читал, что " вам не нужен деструктор в вашем классе C#"
Является ли метод Dispose интерфейса IDisposable опцией?
В этом случае нет неуправляемых ресурсов для освобождения. Кроме того, не определено, когда GC будет утилизировать объект. Когда он в конечном итоге будет удален, все еще можно узнать, где и когда вы проигнорировали этот конкретный экземпляр состояния? Ключевое слово "using" действительно помогает, Но опять же, оно не требуется для ленивых абонентов.
Почему Java и Python методы сбора мусора отличаются?
Python использует метод подсчета ссылок для обработки времени жизни объекта. Таким образом, объект, который больше не имеет смысла, будет немедленно уничтожен.
Но в Java GC (сборщик мусора) уничтожает объекты, которые больше не используются в определенное время.
Почему Java выбирает именно эту стратегию и в чем ее польза?
Это лучше, чем подход Python?
Схемы кэширования для управляемых языков
Это в основном ориентировано на разработчиков настольных приложений.
Как я могу создать блок кэширования, который хорошо играет с GC?
Как я могу сказать GC, что я только что сделал очистку кэша, и пришло время сделать GC?
Как я могу получить точную меру того, когда пришло время выполнить очистку кэша?
Есть ли какие-либо готовые схемы кэширования, из которых я мог бы заимствовать некоторые идеи?
Java и вручную завершить выполнение
Если я вызову finalize() для объекта из моего программного кода, будет ли JVM все еще запускать метод снова, когда сборщик мусора обрабатывает этот объект?
Это был бы примерный пример:
MyObject m = new MyObject();
m.finalize();
m = null;
System.gc()
Может ли явный вызов finalize() заставить сборщик мусора JVM не запускать метод finalize() на объекте m ?
Почему вы не вызываете явно finalize() или не запускаете сборщик мусора?
Прочитав этот вопрос, я вспомнил, как меня учили Java и говорили никогда не звонить finalize() и не запускать сборщик мусора, потому что "это большой черный ящик, о котором вам никогда не нужно беспокоиться". Может ли кто-нибудь свести рассуждения об этом к нескольким предложениям? Я уверен, что мог бы прочитать технический отчет Sun по этому вопросу, но я думаю, что хороший, короткий, простой ответ удовлетворил бы мое любопытство.