2011-03-19 8 views
2

나는 오늘 아침 어딘가에있을 필요가 정말로있다. 그래서 대신 여기에 실적 질문을 게시하기로 결정했습니다.이 linq-to-xml 메서드의 성능을 향상시킬 수 있습니까?

아래 코드는 작동하지만로드 및 저장 방법을 여러 번 호출합니다. 이것은 효율적이지 않습니다. 지금까지로드 및 저장 라인이 루프 외부에서 발생하는 코드를 제공 할 수 있습니까? 로드를 호출하고 한 번만 저장하려고합니다.

감사 챕스 :

public void RemoveNodes(IList<String> removeItems) 

    { 

     foreach (String removeItem in removeItems) 

     { 

      XDocument document = XDocument.Load(fullFilePath); 

      var results = from item in document.Descendants(elementName) 

          let attr = item.Attribute(attributeName) 

          where attr != null && attr.Value == removeItem.ToString() 

          select item; 

      results.ToList().ForEach(item => item.Remove()); 

      document.Save(fullFilePath); 

     } 

    } 

답변

2

당신은 이미 답 자신을 준 - 단지 루프 외부 LoadSave 통화를 이동합니다. 이 변환에서 XAttributestring 반환 널 (null)는 사실을 사용

XDocument document = XDocument.Load(fullFilePath); 
foreach (String removeItem in removeItems) 
{ 
    var results = from item in document.Descendants(elementName) 
        where (string) item.Attribute(attributeName) == removeItem 
        select item; 
    results.ToList().ForEach(item => item.Remove()); 
} 
document.Save(fullFilePath); 

: 당신은 당신이 약간 간단한 너무하지만 쿼리를 만들 수 있습니다

... 자신의 것을 구현하는 데 문제가 된 곳은 나에게 분명하지 않다 속성 참조 자체가 null의 경우 나 자신에 대한 변명을하지 노력할 것이다

var results = document.Descendants(elementName) 
      .Where(item => (string) item.Attribute(attributeName) == removeItem); 
+0

:

당신은 쿼리 식을 사용할 필요가 없습니다. 나는 나무를 볼 수있는 나무를 볼 수 없었던 것 같습니다. 나는 문제를 다시 조사 할 때 내 처방 된 약을 마셨을 것이다. 성능 향상으로 인해 게시 할 가치가 있었지만 단순화로 인해 눈치 채지 못했을 것입니다. 감사합니다. Jon – CarneyCode

관련 문제