В примере Вы отправили, он все еще "не освобождает память теперь". Вся память собрана "мусор", но она может позволить памяти быть собранной в более раннем поколение . Необходимо было бы запустить некоторые тесты, чтобы быть уверенными.
Руководство по проектированию Платформы является инструкциями и не правилами. Они говорят Вам, для чего интерфейс, прежде всего, когда использовать его, как использовать его, и если не использовать его.
я когда-то прочитал код, который был простым RollBack () при отказе, использующем IDisposable. Класс MiniTx ниже начал бы работу, флаг Располагают () и если бы эти Commit
вызова никогда не происходило, то он затем звонил бы Rollback
на себе. Это добавило слой косвенности, делающей код вызова, намного легче понять и поддержать. Результат смотрел что-то как:
using( MiniTx tx = new MiniTx() )
{
// code that might not work.
tx.Commit();
}
я также видел, что синхронизация / регистрирующий код делает то же самое. В этом случае Расположение () метод остановил таймер и зарегистрировал это, блок вышел.
using( LogTimer log = new LogTimer("MyCategory", "Some message") )
{
// code to time...
}
, Таким образом, вот несколько конкретных примеров, которые не делают никакой очистки неуправляемого ресурса, но делают успешно используемый IDisposable для создания более чистого кода.
Нет ничего плохого в копировании и вставке фрагментов кода, именно с этого начинается большинство людей, и вы будете продолжать это делать, пока не ознакомитесь с вставляемыми фрагментами и начнете изменять биты и части или даже начать с нуля самостоятельно.
Что касается этого конкретного фрагмента кода, я действительно не вижу ничего плохого в его копировании, кроме как не полагаться на встроенные обработчики событий и ненавязчиво добавлять «mousedown» с помощью jQuery.
Причина, по которой трудно найти плагин- потому что это не значит, что это не очень "jQuery". Под этим я подразумеваю, что плагины jQuery обычно работают с объектами jQuery, и выбор не имеет ничего общего с какими-либо элементами.
Изменить: Я пропустил тот факт, что вы разместили эту ссылку в своем вопросе, но оставлю ее ниже для полнота, поскольку моя версия отформатирована лучше (но в остальном идентична). :)
<script language=javascript>
function getSelText() {
var txt = '';
if (window.getSelection) {
txt = window.getSelection();
} else if (document.getSelection) {
txt = document.getSelection();
} else if (document.selection) {
txt = document.selection.createRange().text;
} else return;
document.aform.selectedtext.value = txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()">
<form name=aform >
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>