문제

그래서, 주제에 약 2 시간 후에 나는 철저히 혼란스러워합니다. SPContext와 관련하여 SPWEB 객체에서 Dispose ()를 사용하는 방법에 대한 자리에 대한 관점이 있습니다.

누군가가 특정한 맥락에서 나를 위해 이것을 분명히 할 수 있습니까? 목록을 인스턴스화하는 사이트 정의를 작성하고 있으므로 항상 목록을 SpContext에서 가져올 수 있다고 가정합니다. 콘솔이나 PowerShell 실행의 위험이 없습니다.

규칙은 SPContext.current.web 객체를 처분하지 마십시오. 그 규칙은 미러 인스턴스에도 적용됩니까? 의미 :

using (SPWeb web = SPContext.Current.Web)
{
    SPList TargetList = web.GetList(web.ServerRelativeUrl + "/lists/Post");
    SPListItemCollection items = TargetList.GetItems(query);
}
.

vs

SPList TargetList = SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/Post");
SPListItemCollection items = TargetList.GetItems(query);
.

여기에 실제, 질적 차이가 있습니까? 새 객체를 인스턴스화하지 않고 프로세스주기를 저장하지 않으므로 실제로 자리 표시 자로 사용됩니다

이와 같은 데이터 액세스 객체를 작성하는 데 위험이 있습니까?

public static SPList PostList()
{
  return SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/Post");
}
static public List<Post> GetPostsByCommunity(string CommunityName) 
{
    SPList TargetList = PostList();
    SPListItemCollection items = TargetList.GetItems(query);
}
.

일하는 목록은 4 개의 컬렉션이므로 각각에 대해 정적 객체를 가질 수 있으며 반환 된 정보로 채워진 객체를 반환하는 매우 빡빡하고 간단한 데이터 액세스 방법을 가지고 있습니다.

(쿼리 및 루핑의 부족을 무시하십시오. 데이터 액세스에 충분히 초점을 맞추고 싶습니다)

왜 이것이 나쁜 생각이고이를 할 올바른 방법은 무엇인지 말해주십시오.

도움이 되었습니까?

해결책

정확하고 spContext에서 속성에서 검색된 객체를 처분하지 마십시오.

간단한 이유가 있으므로 코드가 수행 한 후에 실행 한 후에 실행되는 다른 스레드, 컨트롤 또는 다른 코드가 있고 올바르게 존재할 것으로 예상되는지 확인할 수 없습니다.

SPContext의 Web 속성을 처분하는 것을 제외하고는 처음 두 가지 예 (다른 대체 대체)가 기능적으로 동일합니다. 이는 아프다고 조언합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top