каким образом можно удалить объект

Удаление объекта или группы объектов

Выделите в окне Проводника или папке Мой компьютер объект (или группу объектов) и воспользуйтесь следующими способами удаления:

1) выберите команду меню Файл/Удалить;

2) нажмите клавишу Delete на клавиатуре;

3) нажмите кнопку Удалить (Delete) на панели инструментов окна приложения, в котором работаете;

4) щелкните правой кнопкой мыши на выделенных объектах и в открывшемся контекстном меню выберите команду Удалить (Delete);

5) перетащите мышью в Корзину.

Чтобы сразу удалить объект с жесткого диска, не отправляя его в Корзину, выделите этот объект и нажмите комбинацию клавиш Shift+Delete.

Для безвозвратного удаления объектов необходимо щелкнуть правой клавишей мыши по значку Корзины и в открывшемся контекстном меню выбрать команду Очистить корзину.

Объекты, удаленные с дискеты, сетевого диска, в Корзину не помещаются.

Восстановление удаленных объектов

1) Выполните двойной щелчок по значку Корзины.

2) В открывшемся окне Корзина выделите объект (или группу объектов) подлежащий восстановлению и выберите команду меню Фай/Восстановить.

Если удаляется папка, то вместе с ней в Корзину помещаются все находящиеся в ней файлы. При восстановлении файла, находившегося в удаленной папке, вначале будет восстановлена сама эта папка.

Свойства Корзины

В Корзину помещаются удаляемые объекты системы (файл, папка, ярлык и др.).

Диалоговое окно свойств Корзины можно открыть с помощью команды Свойства контекстного меню. В этом окне устанавливаются единые и различные параметры для дисков: максимальный объем корзины, запросы на удаление.

Корзину следует периодически очищать от накапливающихся в ней объектов.

ПОИСК ДАННЫХ. СПРАВОЧНАЯ СИСТЕМА

Источник

Способы удаление объектов

Способ 1. Использование команд меню окна:перейдите в окно своей папки; откройте папку Тренировка; выделите файл с описанием лабораторной работы 1; в меню окна выберите команду ФайлÞУдалить (или в панели инструментов нажмите пиктограмму – Удалить).

Способ 2. Использование команд контекстного меню:в папке Тренировка в контекстном меню файла с описанием лабораторной работы 2 выберите команду Удалить.

Способ 3. Использование «мыши»:в папке Тренировка выделите файл с описанием лабораторной работы 3; нажав левую клавишу «мыши», переместите выделенный файл в папку Корзина (при необходимости сверните или сместите на Рабочем столе «мешающие» окна).

Способ 4. Использование клавиатуры:в папке Тренировка выделите файл с описанием лабораторной работы 4; нажмите на клавиатуре клавишу Delete.

В результате всех проделанных действий выделенные файлы будут удалены в Корзину.

Внимание! Операции копирования, перемещения, удаления довольно часто приходится выполнять над группой объектов. С этой целью необходимо сначала выделить несколько объектов, а затем выполнить необходимые действия по выполнению операций. Для выделения блока файлов необходимо щелкнуть в одном углу блока и растянуть выделение до противоположного угла блока. Для выделения нескольких смежных файлов – выделить имя первого файла, нажать клавишу Shift и выделить последний файл из группы. Для выделения нескольких несмежных файлов – нажать клавишу Ctrlи щелкать по именам нужных файлов. Для выделения всех файлов в папке можно использовать команду из меню окна Правка Þ Выделить все.

Пример 2. Работа в Проводнике.Основные действия с объектами в Проводнике рассмотрим на примере копирования (создания ярлыков) файлов:

· запустите программу Проводник (любым способом);

· выделите в левой панели (Папки) сетевую папку с описанием лабораторных работ (L: Þ Информатика…), при этом содержимое папки отобразится в правой панели Проводника;

· продолжая навигацию в левой панели Проводника (раскрывая или сворачивая структуру папок в узлах «+» или «-»), найдите в своей папке папку Тренировка (не выделяя её!);

· в правой панели выделите описание лабораторной работы 1, нажав правую клавишу «мыши», переместите выделенный файл в папку Тренировка; из меню специального перетаскивания выберите команду Создать ярлыки.

Пример 3. Работа в Far Manager.Основные действия с объектами в Far Manager рассмотрим на примере создания каталогов и копирования файлов:

· запустите программу Far Manager;

· установите в левой панели диск U: (Alt-F1), войдите в свой каталог;

· нажмите на клавиатуре функциональную клавишу F7 (или кнопку F7 в строке функциональных клавиш), в диалоговой панели введите название каталога, нажмите OK;

· установите в правой панели диск U: (Alt-F2), войдите в созданный каталог;

· в левой панели войдите в каталог Описание лабораторных работ; скопируйте в созданный каталог описание лабораторной работы 1 (нажмите на клавиатуре функциональную клавишу F5 (или кнопку F5 в строке функциональных клавиш), в диалоговой панели нажмите OK).

Дата добавления: 2015-09-07 ; просмотров: 3711 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник

Удаление объекта в C++ без создания его через new, или можно ли удалять объекты взятием адреса (&)?

В итоге попробовал такой метод:

Огромное спасибо всем, кто отпишется по данному вопросу.

> Объект BaseClassObj будет удален только по завершению программы.
BaseClass baseClassObj;
Здесь создаётся объект на стеке. Имя — это просто имя объекта. Никаких указателей здесь нет. Как только мы покинем блок (любым образом: штатно выйти, goto, break, выброс аварии — кроме «жёсткого» выхода из программы функциями типа exit), у объекта автоматически исполнится деструктор и прямой вызов не нужен. Блок, то есть подпрограмму BaseClassPresentation.

BaseClass *BaseClassObjPtr = new BaseClass(2);
Здесь BaseClassObjPtr это имя указателя (а не указатель на указатель). Объект создаётся в динамической памяти, и его придётся уничтожать вручную. Многое в Си++11 сделали для того, чтобы подобные объекты уничтожались не вручную, а всё теми же автодеструкторами.
Это уже маленький объект со своим деструктором. А в деструкторе находится delete, и он сработает, как только программа выйдет из своего блока.

То, что вы хотите, иногда бывает нужно, и я вижу этому две причины.
1. Объект управляет какими-то сложными и важными ресурсами: большим количеством памяти, файлом, мьютексом… И этот важный ресурс бывает нужно освободить раньше, чем наступит деструктор. Например, у любого файлового потока есть функция close() — она закрывает файл.
2. У нас сложное и хитрое управление памятью, когда приходится использовать placement new и прямой вызов деструктора. Скажу честно, не использовал никогда. Как и 90% программистов на Си++.

Огромное Вам спасибо за развернутый и понятный ответ!
Однако, я все еще не совсем понимаю, что же происходит в этот момент:

Источник

Удаление объектов

Дата последнего изменения: 8 апреля 2010 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Введение в использование удаляемых объектов SharePoint
Поиск неправильно удаляемых объектов
Приемы написания кода для обеспечения удаления объектов
Объекты SPSite
Объекты SPWeb
Другие объекты, требующие удаления
Заключение

Введение в использование удаляемых объектов SharePoint

Объекты в объектных моделях Microsoft SharePoint Foundation 2010 и Microsoft SharePoint Server 2010 служат в качестве интерфейса для работы с данными SharePoint Foundation. Разработчики часто вызывают объектную модель для чтения или записи данных в хранилищах данных SharePoint Foundation 2010 и SharePoint Server 2010.

Читайте также:  какой подарок можно сделать бабушке на 80 лет на день рождения

В частности, необходимо явно удалить объекты SharePoint, реализующие интерфейс IDisposable, после завершения их использования.

В сценариях, в которых интенсивно применяются объекты SharePoint (например, на сайтах SharePoint, содержащих настраиваемые веб-части), в результате неправильного удаления объектов SharePoint после завершения их использования может наблюдаться следующее нестандартное поведение.

Частый перезапуск пула приложений SharePoint Foundation, особенно во время пиковых нагрузок

Сбои приложений, отображающиеся в отладчике как повреждение кучи

Использование большого объема памяти рабочими процессами служб IIS

Низкая производительность системы и приложений

Данная статья служит в качестве руководства по выполнению требуемых процедур для обработки и удаления объектов SharePoint, реализующих интерфейс IDispose. Проблемы, описанные в данной статье, также выявляются средством проверки удаления объектов SharePoint (Возможно, на английском языке), доступной для загрузки бесплатной программой, которая проверяет сборки на наличие способов написания кода, приводящих к утечке памяти из-за неправильной обработки и удаления объектов SharePoint.

Почему необходимо удалять объекты

Некоторые объекты SharePoint Foundation, особенно объекты класса SPSite и SPWeb, создаются как управляемые объекты. Однако эти объекты используют неуправляемый код и память для выполнения основной части их работы. Управляемая часть объекта много меньше, чем неуправляемая часть. Так как меньшая управляемая часть не создает нехватку памяти, видимую для сборщика мусора, сборщик мусора не освобождает память своевременно от объекта. Использование объектом большого количества неуправляемой памяти может вызвать некоторое неприемлемое поведение, описанное выше. При вызове приложений, работающих с объектами IDisposable в SharePoint Foundation, необходимо удалять эти объекты после завершения использования их приложением. Нельзя полагаться на сборщик мусора и автоматическое освобождение объектов из памяти.

Поиск неправильно удаляемых объектов

Ниже перечислены вопросы, которые помогут определить потенциальное наличие неправильно удаляемых объектов:

Часто ли перезапускается пул приложений, особенно при большой нагрузке (подразумевается, что пул приложений настроен на перезапуск при достижении порогового значения памяти)?

Пороговое значение памяти должно быть от 800 МБ до 1,5 ГБ, при наличии минимум 2 ГБ ОЗУ. Перезапуск пула приложений при значении, близком к 1 ГБ, дает лучшие результаты, но рекомендуется провести экспериментальное определение того, какое значение лучше работает в имеющейся среде. Если параметр перезапуска слишком мал, в системе будут возникать проблемы с производительностью из-за частого перезапуска пула приложений. Если параметр слишком велик, в системе будут возникать проблемы с производительностью из-за подкачки страниц, фрагментации памяти и других проблем.

Наблюдается ли плохая работа системы, особенно при больших нагрузках?

При возрастании использования памяти система должна компенсировать это, например, посредством страничной памяти и ее дефрагментации.

Происходят ли сбои системы или возникают ли у пользователей непредвиденные ошибки, такие как ошибки окончание времени ожидания или «страница недоступна», особенно при больших нагрузках?

При увеличении использования памяти или ее фрагментации некоторые функции завершаются ошибкой, так как они не могут выделить память для других действий. Во многих случаях код неправильно обрабатывает исключение «недостаточно памяти», что приводит к ложным или неправильно интерпретируемым ошибкам.

Используются ли в системе настраиваемые или сторонние веб-части или настраиваемые приложения?

Возможно, эти веб-части не удаляют объекты SharePoint, подразумевая, что сборщик мусора выполняет эту функцию автоматически. Однако это верно не во всех случаях.

Если был дан ответ «да» на вопрос 4 и один или несколько других вопросов, есть большая вероятность, что настраиваемый код не удаляет элементы правильно.

Если сайты проявляют какое-либо необычное поведение, описанное выше, можно определить, является ли причиной нехватка памяти из-за неправильно удаляемых объектов, проверив журналы ULS (доступные в папке C:\Program Files\Common Files\microsoft shared\Web Server Extensions\14\LOGS) на записи, связанные с объектом SPRequest. Каждый экземпляр SPSite и SPWeb содержит ссылку на объект SPRequest, который в свою очередь содержит ссылку на неуправляемый объект COM, обрабатывающий связь с сервером баз данных. SharePoint Foundation отслеживает число объектов SPRequest, которые существуют в каждом определенном потоке и параллельных потоках и добавляет полезные записи в журналы в трех следующих сценариях:

Полное число объектов SPRequest превышает настраиваемый порог.

Объект SPRequest продолжает существовать после завершения потока.

Объект SPRequest был удален из кучи сборщиком мусора.

Первый сценарий встречается наиболее часто, особенно если сайт использует значение порога по умолчанию для девяти объектов SPRequest. Если число объектов SPRequest превышает порог, в журналах ULS появляется следующая запись:

«Potentially excessive number of SPRequest objects (number of objects) currently unreleased on thread number of thread. Ensure that this object or its parent (such as an SPWeb or SPSite object) is being properly disposed. Allocation Id for this object: » (Потенциально избыточное число объектов SPRequest (число объектов) не удалено в настоящее время в потоке номер потока. Убедитесь, что этот объект или его родительский объект (например, объект SPWeb или SPSite) удаляется правильно. Идентификатор выделения для этого объекта: )

Лучшее значение порога зависит от свойств сайта и приложений, работающих на нем. Если сайты испытывают проблемы с производительностью, необходимо проверить журналы ULS установки, чтобы понять, сколько объектов SPRequest создается приложениями сайта. Это поможет определить, создают ли сайты и приложения слишком много объектов SPRequest. Даже если неправильное удаление объектов не является причиной проблем производительности, может потребоваться переделать сайты или настраиваемые приложения сайтов, чтобы уменьшить общее потребление памяти, вызванное избыточным числом объектов SPRequest.

Так как очень маленькое значение порога по умолчанию не может применяться ко многим сайтам, можно изменить это значение, отредактировав следующий раздел реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings

LocalSPRequestWarnCount = требуемое значение порога

После определения того, что неправильное удаление объектов может быть причиной большого числа объектов SPRequest и увеличения потребления памяти сайтами без необходимости, можно найти определенные экземпляры с неправильным удалением, просмотрев следующие две записи. Оба сообщения указывают на случаи неэффективного использования памяти из-за неправильного удаления объектов SharePoint, и оба случая зависят от числа и состояния объектов SPRequest в одном потоке:

«Объект SPRequest не был удален перед завершением этого потока. Чтобы избежать неэффективного использования системных ресурсов, удалите этот объект или его родительский объект (например, SPSite или SPWeb), как только использование объекта будет завершено. Этот объект будет удален. Идентификатор выделения: Чтобы определить, где был выделен объект, создайте подраздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings. Затем создайте новый параметр DWORD с именем SPRequestStackTrace и значением 1 в этом разделе».

Это сообщение указывает, что объект SPRequest был удален из-за того, что он существовал после завершения потока.

Читайте также:  кто сказал что друзей любить нельзя песня текст

«An SPRequest object was reclaimed by the garbage collector instead of being explicitly freed. To avoid wasting system resources, dispose this object or its parent (such as an SPSite or SPWeb) as soon as you are done using it. Allocation Id: To determine where this object was allocated, create a registry key at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings. Then create a new DWORD named SPRequestStackTrace with the value 1 under this key.» (Объект SPRequest был освобожден из памяти сборщиком мусора вместо явного освобождения. Чтобы избежать расходования системных ресурсов, удалите этот объект или его родительский объект (например, SPSite или SPWeb) после завершения его использования. Идентификатор выделения: Чтобы определить, где этот объект был размещен, создайте раздел реестра по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings. Затем создайте новый параметр DWORD с именем SPRequestStackTrace и значением 1 в этом разделе.)

Это сообщение указывает, что сборщик мусора удалил объект SPRequest.

Чтобы определить код, приводящий к этой проблеме, можно выполнить поиск в журналах на записи, содержащие идентификаторы выделения, или следовать инструкциям в предупреждении и добавить следующий параметр в реестр:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings SPRequestStackTrace = 1

Этот параметр подраздела обеспечивает то, что трассировка стека изначального выделения SPRequest (которое происходит при создании объектов SPSite или SPWeb) будет добавлена в журналы при возникновении этого предупреждения.

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

Приемы написания кода для обеспечения удаления объектов

Можно использовать несколько приемов написания кода, чтобы обеспечить удаление объектов. Эти приемы включают использование в коде следующих элементов:

Блоки try, catch и finally

Использование методов Dispose или Close

Оператор using

Можно автоматически удалять объекты SharePoint, реализующие интерфейс IDisposable, с помощью оператора using в Microsoft Visual C# и Visual Basic.

В следующем коде приведен пример.

Использование оператора using может существенно упростить код. Как отмечено в справочнике по C# (Оператор using), среда выполнения CLR преобразует операторы using в блоки try and finally, и все объекты, реализующие интерфейс IDisposable, удаляются. Однако во многих случаях операторы using не рекомендуются, или они должны использоваться с некоторыми предосторожностями и пониманием того, что делает среда выполнения. В следующем примере кода показан один случай, где может потребоваться не позволять среде выполнения создавать блок finally и удалять объекты. В этом случае SPContext возвращает объект SPWeb.

Объекты SPContext управляются платформой SharePoint и не должны явно удаляться в коде. Это верно также для объектов SPSite и SPWeb, возвращаемых SPContext.Site, SPContext.Current.Site, SPContext.Web и SPContext.Current.Web.

Необходимо принять меры предосторожности и знать действия среды выполнения при комбинировании вызовов объектной модели SharePoint в одной строке. Утечки, возникающие при данном сценарии, являются наиболее трудными для поиска.

В следующем примере кода создается экземпляр объекта SPSite, но не удаляется, так как среда выполнения обеспечивает удаление только объекта SPWeb, возвращаемого OpenWeb.

Эту проблему можно устранить вложением одного оператора using в другой.

Если не выполняются какие-либо операции с объектом SPSite, можно написать это более выразительно, как в следующем примере.

В других случаях необходимо создать собственные блоки try, catch и finally. Наиболее очевидные примеры — это сценарии, где требуется обработать исключения и поэтому они должны включать блок catch. В следующем разделе предоставлены рекомендации о том, когда и как использовать блоки try, catch и finally.

Блоки try, catch и finally

Использование блоков try, catch и finally имеет смысл, когда требуется обработать исключения. Любой код в блоке try/catch должен иметь управляющий оператор finally, который обеспечивает удаление объектов, реализующих IDisposable. Обратите внимание, что в следующем примере кода необходимо заполнить блок catch кодом, обрабатывающим исключение. Никогда не оставляйте блок catch пустым. Также обратите внимание на рекомендацию проверки на значение null перед удалением.

Блоки Try и finally или оператор using могут потребоваться, чтобы избежать потенциальных утечек при создании удаляемого объекта в блоке foreach, как показано в следующем примере кода.

Response.Redirect с блоками try, catch и finally и операторами using

Блок finally выполняется после вызовов Response.Redirect в блоке try. В итоге Response.Redirect создает исключение ThreadAbortException. При возникновении данного исключения среда выполнения выполняет все блоки finally перед завершением потока. Однако так как блок finally может выполнять неограниченное вычисление или отменять ThreadAbortException, поток не обязательно завершится. Поэтому перед любым перенаправление или передачей обработки необходимо удалить объекты. Если код должен выполнить перенаправление, реализуйте это способом, подобным следующему примеру кода.

Так как оператор using дает команду среде выполнения создать блок finally, то при использовании Response.Redirect в операторе using убедитесь, что объекты удаляются правильно. В следующем примере кода показывается, как это можно сделать.

Рекомендации по уменьшению долговременного хранения объектов

Можно уменьшить долговременное хранение объектов SharePoint, следуя следующим общим рекомендациям.

При создании объекта с помощью оператора new убедитесь, что создающее приложение удаляет объект.

Примечание

Рекомендуемый прием написания кода № 1

Рекомендуемый прием написания кода № 2

Удаляйте объекты, созданные методами SharePoint, которые возвращают другие объекты SPWeb (такие как OpenWeb()).

Примечание

Рекомендуемый прием программирования

Не используйте какие-либо объекты SPRequest (а также любые объекты, содержащие ссылку на объект SPRequest) в разных потоках. Любые приемы программирования, в которых используется объект SPRequest в двух или более потоках или создается объект SPRequest в одном потоке и удаляется в другом, не поддерживаются. Это значит, что нельзя сохранять какой-либо объект, содержащий ссылку на объект SPRequest в статической переменной. Поэтому не сохраняйте объекты SharePoint, реализующие IDisposable (такие как SPWeb или SPSite) а статических переменных.

Объекты SPSite

В данном разделе описываются ситуации, в которых новые объекты SPSite возвращаются и должны быть удалены.

В общем случае каждый раз при использовании вызывающим приложением нового конструктора SPSite (с любой сигнатурой) нужно вызывать метод Dispose(), когда завершается использование объекта. Если объект SPSite получен от GetContextSite(), вызывающее приложение не должно удалять объект. Так как объекты SPWeb и SPSite содержат внутренний список, происходящий таким образом, удаление объекта может вызвать непредвиденное поведение объектной модели SharePoint. Внутренне SharePoint Foundation перечисляет этот список после завершения страницы, чтобы правильно удалить объекты.

Класс SPSiteCollection

В этом разделе описываются методы, свойства или операторы объекта SPSiteCollection которые требуют, чтобы возвращенный объект SPSite был закрыт после обеспечения доступа.

Метод SPSiteCollection.Add

Метод SPSiteCollection.Add создает и возвращает новый объект SPSite. Необходимо удалить любой объект SPSite, возвращенный методом SPSiteCollection.Add.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Оператор индекса SPSiteCollection [ ]

Оператор индекса SPSiteCollection [] возвращает новый объект SPSite для каждого доступа. Экземпляр SPSite создается даже в том случае, если уже было обращение к данному объекту. В следующих примерах кода показано ошибочное удаление объекта SPSite.

Примечание

Пример неправильного кодирования № 1

Использование оператора индекса

Пример неправильного кодирования № 2

Использование цикла foreach

Рекомендуемый прием написания кода № 1

Использование оператора индекса

Рекомендуемый прием написания кода № 2

Использование цикла foreach

Свойство SPSite.AllWebs (SPWebCollection)

В данном разделе описаны методы, свойства и операторы коллекции свойств AllWebs, которые требуют закрытия объекта SPWeb после осуществления доступа.

Метод SPSite.AllWebs.Add

Метод SPSite.AllWebs.Add создает и возвращает объект SPWeb. Нужно удалить все объекты SPWeb, возвращаемые из SPSite.AllWebs.Add.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Метод SPWebCollection.Add

Метод SPWebCollection.Add создает и возвращает объект SPWeb, который требуется удалить.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Оператор индекса SPSite.AllWebs [ ]

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода № 1

Использование цикла foreach

Рекомендуемый прием написания кода № 2

Использование оператора индекса

Методы SPSite.OpenWeb и SPSite. SelfServiceCreateSite

Методы OpenWeb() и SelfServiceCreateSite (со всеми сигнатурами) объекта SPSite создают объект SPWeb и возвращают его вызывающему приложению. Этот новый объект не сохраняется в объекте SPSite и не удаляется где-либо в классе SPSite. По этой причине необходимо удалить все объекты, созданные с помощью этих методов.

Пример неправильного написания кода

Рекомендуемый прием написания кода

Свойство SPSite.RootWeb

В предыдущем руководстве указано, что вызывающее приложение должно удалять свойство SPSite.RootWeb перед удалением объекта SPSite, который использует его. Это больше не является официальной рекомендацией. Удаление обрабатывается автоматически в SharePoint Foundation и SharePoint Server. Также свойства SPSiteLockIssue, Owner и SecondaryContact использовали свойство RootWeb внутренне. В обновленном руководстве для RootWeb более не рекомендуется вызывать метод Dispose для свойства SPSite.RootWeb, когда какое-либо из этих свойств используется.

Примечание

Рекомендуемый прием написания кода

Microsoft.Office.Server.UserProfiles.PersonalSite (только Office SharePoint Server 2007)

Microsoft.Office.Server.UserProfiles.PersonalSite возвращает объект SPSite, который должен быть удален.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

В другом крайнем случае UserProfiles.PersonalSite утечки, как показано в следующем примере кода.

Можно разрешить этот тип утечек с помощью паттерна, показанного в следующем примере кода.

Также обратите внимание, что можно увеличить производительность (и избежать создания объекта SPSite) с помощью получения объекта PersonalSite из ProfileLoader, как показано в следующем примере кода.

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

Объекты SPWeb

В этом разделе описываются ситуации, когда возвращаются объекты SPWeb, для которых может потребоваться удаление.

Свойство SPWeb.ParentWeb

Обновленное руководство

В предыдущем руководстве указано, что вызывающее приложение должно удалять свойство SPWeb.ParentWeb. Это более не является официальной рекомендацией. Удаление обрабатывается автоматически в SharePoint Foundation и SharePoint Server.

Примечание

Рекомендуемый прием написания кода

Свойство SPWeb.Webs

В этом разделе описываются методы, свойства или операторы в коллекции свойств Webs, требующие удаления объекта SPWeb после осуществления доступа.

SPWeb.Webs

Свойство SPWeb.Webs возвращает объект SPWebCollection. Объекты SPWeb в этой коллекции должны быть удалены.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

SPWeb.Webs.Add

Метод SPWeb.Webs.Add (или SPWebCollection.Add) создает и возвращает новый объект SPWeb. Необходимо удалить все объекты SPWeb, возвращаемые вызовом этого метода.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Оператор индекса SPWeb.Webs[]

Пример неправильного кодирования № 1

Использование цикла For

Пример неправильного кодирования № 2

Использование цикла foreach

Для исправления кода рекомендуется производить удаление в конце каждого цикла.

Рекомендуемый прием написания кода № 1

Использование цикла For

Рекомендуемый прием написания кода № 2

Использование цикла foreach

Рекомендуемый прием написания кода № 3

Использование цикла for с автоматическим удалением

Другие объекты, требующие удаления

В этом разделе описывается, когда требуется вызов метода Dispose для других объектов SharePoint.

Свойство Microsoft.SharePoint.Portal.SiteData.Area.Web

Свойство Web класса SharePoint.Portal.SiteData.Area возвращает новый объект SPWeb каждый раз при доступе к нему. Любое использование свойства Area.Web должно иметь соответствующий вызов метода Dispose. Хотя классы Area и AreaManager не являются устаревшими, они могут создавать проблемы при переносе старого кода.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Методы SPControl.GetContextSite и SPControl.GetContextWeb

Если объект получен из объектов контекста (методы GetContextSite и GetContextWeb в классе SPControl), вызывающее приложение не должно вызывать метод Dispose для объекта. Такое действие может вызвать непредсказуемое поведение объектной модели SharePoint или ошибку. Причиной является внутренний список, сохраненный в объектах SPSite и SPWeb, получаемых таким образом. На внутреннем уровне объектная модель перечисляет этот список после завершения обработки страницы для правильного удаления объектов.

Следует также удалить объект, созданный из этих объектов, — например, если веб-сайт открыт из объекта SPSite, полученного с помощью метода GetContextSite.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager

Класс SPLimitedWebPartManager содержит ссылку на внутренний объект SPWeb, который должен быть удален.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Microsoft.SharePoint.Publishing.PublishingWeb

Пространство имен Microsoft.SharePoint.Publishing принадлежит SharePoint Server 2010. Этот раздел применяется к SharePoint Server 2010 и не применяется к SharePoint Foundation 2010.

Метод GetPublishingWebs класса PublishingWeb возвращает объект PublishingWebCollection. Нужно вызвать метод Close для каждого перечисленного объекта innerPubWeb. При вызове только метода GetPublishingWeb не требуется вызывать Close.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Существует сходное требование к вызову Close для каждого объекта PublishingWeb, созданного вызовом метода Add в коллекции PublishingWebCollection, возвращенной Microsoft.SharePoint.Publishing.PublishingWeb.GetPublishingWebs. Пример кода см. в разделе для метода GetPublishingWebs(). Эта рекомендация решает проблему, определяемую средством проверки удаления объектов SharePoint (Возможно, на английском языке) как SPDisposeCheckID_310.

Метод Microsoft.SharePoint.Publishing.PublishingWeb.GetVariation возвращает объект PublishingWeb, который должен быть удален.

Примечание

Пример неправильного написания кода

Рекомендуемый прием написания кода

Способы удаления объектов в методах

В следующем примере показан общий способ обработки объектов SPSite и SPWeb в методах класса. Иногда этот способ требуется, но убедитесь, что не пропущено подходящее время вызова метода Dispose после окончания работы с вызовами между методами. В следующем примере кода показан вариант, в котором SPSite и SPWeb создают утечку, когда класс выходит из области действия.

Заключение

Так как многие объекты SharePoint реализуют интерфейс IDisposable, следует с вниманием использовать такие объекты, чтобы избежать их сохранения в памяти. Следуя рекомендациям по удалению объектов SharePoint, описанным в этой статье, можно обеспечить надежность настраиваемого кода.

Благодарности

Мы хотим высказать благодарность следующим специалистам за их вклад и руководство при создании этой статьи:

Источник

Читайте также:  как можно узнать свои способности
Портал про кино и шоу-биз
Примечание