Sharepoint 학습노트 - 연습문제 시리즈 - 70-573 연습문제 해석 - (Q4-Q7)

8170 단어 SharePoint
Question 4You have a Web Part that contains the following code segment. (Line numbers are included for reference only.)01 protected void Page_Load(object sender, EventArgs e)02 {03   SPSite site = new SPSite("http://www.contoso.com/default.aspx "); 04   {05     SPWeb web = site.OpenWeb();06     07   }08 }
You deploy the Web Part to a SharePoint site.After you deploy the Web Part, users report that the site loads slowly. You need to modify the Web Part to prevent the site from loading slowly.What should you do?A. Add the following line of code at line 06:web.Close();B. Add the following line of code at line 06:web.Dispose();C. Add the following line of code at line 06:site.Close();D. Change line 03 to the following code segment:using (SPSite site = new SPSite("http://www.contoso.com/default.aspx "))
해석: 이 문제는 SPSite, SP웹 대상 메모리의 방출을 시험한 것이 분명하다.앞의 Question2, 3의 분석을 통해 우리는 Close 방법을 사용하는 것과 Dispose 방법을 사용하여 메모리를 방출하는 것의 차이를 이미 알고 있다.분명히 답안 A, B, C는 각각 SPweb 대상이나 SPSite 대상을 방출했고 방출 시기가 맞지 않았다.우리는 보통 두 가지 방식으로 이런 코드를 처리한다. 1. Try...Catch….Finally 코드 구조로 메모리의 방출 처리를 실현할 수 있다. 2. using() 문구를 통해 메모리의 방출을 자동으로 실현할 수도 있다. (사실 시스템은 실행할 때 자동으로 Using 코드 블록을 Try....Catch...Finally 코드 블록으로 처리한다).http://msdn.microsoft.com/en-us/library/ee557362.aspx 그래서 이 제목의 정확한 옵션은 D입니다.
Question 5You create an event receiver.
The ItemAdded method for the event receiver contains the following code segment. (Line numbers are included for reference only.)
01 SPWeb recWeb = properties.Web;02 using (SPSite siteCollection = new SPSite("http://site1/hr "))03 {04   using (SPWeb web = siteCollection.OpenWeb())05   {06     PublishingWeb oWeb = PublishingWeb.GetPublishingWeb(web); 07     PublishingWebCollection pubWebs = oWeb.GetPublishingWebs();08     foreach (PublishingWeb iWeb in pubWebs)09     {10       try11       {12         SPFile page = web.GetFile("/Pages/default.aspx");13         SPLimitedWebPartManager wpManager = page.GetLimitedWebPartManager(PersonalizationScope.Shared);14       }15       finally16       {17         if (iWeb != null)18         {19           iWeb.Close();20         }21       }22     }23   }24 }
You need to prevent the event receiver from causing memory leaks.Which object should you dispose of?
A. oWeb at line 06B. recWeb at line 01C. wpManager at line 13D. wpManager.Web at line 13
확인: 옵션 A. oWeb 객체의 경우 PublishingWeb.GetPublishingWeb 방법에서 얻은 대상입니다. 이 대상은 SPWeb 대상이 아닙니다. 이것은 SPWeb 대상 집합을 감싸는 대상의 실례입니다. GetPublishingWebs 방법을 통해 이 감싸는 SPWeb 대상 집합을 더 얻을 수 있습니다.또한 다음 코드와 같이 이 객체 세트를 반복하여 각각의 SP웹 객체를 해제합니다.
using(SPWeb web = site.OpenWeb())
{
  PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
  PublishingWebCollection pubWebs = pubWeb.GetPublishingWebs());
  foreach(PublishingWeb innerPubWeb in pubWebs)
  {
    try
    {
       Process innerPubWeb
    }
    finally
    {
      innerPubWeb.Web.Dispose();
    }
  }
}

본 문제도 상술한 방식으로 이루어졌기 때문에 옵션 A는 메모리 유출을 일으키지 않습니다.옵션 B. recWeb은properties 대상의 웹 속성을 통해 얻을 수 있으며,properties는 Evenreceiver의 전달 매개 변수입니다.예를 들면 다음과 같습니다.
private static void ItemAdded(SPItemEventProperties properties)       
{
    SPWeb web = properties.Web; 
}   

이렇게 가져온 SPWeb 객체는 SPSite 객체에서 작성된 것이기 때문에 메모리 누수가 발생하지 않으며 이 SPSite 객체는 Event 이벤트가 끝난 후 자동으로 재활용됩니다.
옵션 C의 경우 SPWeb 객체가 아니므로 해제할 객체가 없습니다.옵션 D는 wpManager 때문에 메모리 유출 문제를 일으키는 이유입니다.웹은 페이지입니다.GetLimitedWebPartManager 방법은 SPLimitedWebPartManager 대상을 되돌려줍니다. 이 SPLimitedWebPartManager 대상의 실례는 SPweb 대상에 대한 내부 인용을 포함하고 SPweb 대상을 인용한 후에 자동으로 방출되지 않기 때문에 wpManager입니다.웹 객체는 메모리 유출을 유발합니다.다시 말하면 GetLimitedWebPartManager와 관련된 방법을 사용하여 SPweb 대상을 얻을 때 메모리 유출 문제에 주의해야 한다.따라서 본 문제는 D 참조를 선택해야 한다. http://msdn.microsoft.com/zh-tw/library/ms497306.aspxhttp://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/8999f361-6e8e-452a-a42e-c8bf323c106e
Question 6You create a console application to manage Personal Sites. The application contains the following code segment. (Line numbers are included for reference only.)
01 SPSite siteCollection = new SPSite("http://moss ");02 UserProfileManager profileManager = new UserProfileManager(ServerContext.GetContext(siteCollection));03 UserProfile profile = profileManager.GetUserProfile("domain\\username");04 SPSite personalSite = profile.PersonalSite;0506 siteCollection.Dispose();
You deploy the application to a SharePoint site.After deploying the application, users report that the site loads slowly. You need to modify the application to prevent the site from loading slowly.What should you do? A. Remove line 06.B. Add the following line of code at line 05:personalSite.close();C. Add the following line of code at line 05:personalSite.Dispose();D. Change line 06 to the following code segment:siteCollection.close();
해석: 옵션 A는 틀린 데다가 틀린 것이 분명하다. 이미 SPSite로 인한 메모리 유출 문제로 인해 이 문제를 더욱 확대하고 있다.옵션 D. 코드에 사이트Collection에 대한 메모리가 풀렸기 때문에 이럴 필요가 없습니다. 즉, 사이트Collection입니다.Dispose();옵션 B와 C:Close 방법은 여기서 진정으로 방출을 완성한 것이 아니다. 왜냐하면personalSite는 당신이 새로 만든 SPSite 대상의 실례가 아니기 때문에Question2,3 해석을 보니Dispose 방법을 통해서만 SPSite의 메모리를 진정으로 방출할 수 있다.그래서 이 문제의 정답은 C 입니다.
 Question 7You are creating a Web Part for SharePoint Server 2010.
The Web Part contains the following code segment. (Line numbers are included for reference only.)
01 protected override void CreateChildControls()02 {03   base.CreateChildControls();04   SPSecurity.RunWithElevatedPrivileges(05     delegate()06     {07       Label ListCount = new Label();08       ListCount.Text = String.Format("There are {0} Lists", SPContext.Current.Web.Lists.Count);09       Controls.Add(ListCount);10     });11 }
You need to identify which line of code prevents the Web Part from being deployed as a sandboxed solution.Which line of code should you identify?A.03B. 04C. 08D. 09
해석 본 문제는 Sandbox Solution에 대한 제한 문제입니다. Sandbox가 안전한 이유는 제한을 받기 때문에 RunWith Elevated Privileges 수단을 통해 코드에 대한 접근 권한을 향상시키는 것을 지원하지 않습니다. 이로 인해 디자인의 취지를 파괴했습니다.Application Pages • Custom Action Group • Farm-scoped features • HideCustom Action element • Web Application-scoped features • Workflows with code
그래서 이 문제의 정답은 B 입니다.
참조:
http://msdn.microsoft.com/en-us/library/gg615454(v=office.14).aspx
http://msdn.microsoft.com/en-us/library/gg615454.aspx
http://sharing-the-experience.blogspot.com.au/2011/06/sharepoint-2010-sandboxed-solution.html

좋은 웹페이지 즐겨찾기