정렬 작업을 위해 XSL 스타일 시트를 사용하고 있었지만 속도가 매우 느립니다. 더 효율적인 방법이 있습니까?XmlDocument에서 노드를 정렬하는 가장 좋은 방법은 무엇입니까? (.Net)
노드를 객체로 변환하고 GenericList에서 정렬하면 노드의 플랫 목록이됩니다.
EDIT 최종 결과가 XML 일 필요는 없습니다.
정렬 작업을 위해 XSL 스타일 시트를 사용하고 있었지만 속도가 매우 느립니다. 더 효율적인 방법이 있습니까?XmlDocument에서 노드를 정렬하는 가장 좋은 방법은 무엇입니까? (.Net)
노드를 객체로 변환하고 GenericList에서 정렬하면 노드의 플랫 목록이됩니다.
EDIT 최종 결과가 XML 일 필요는 없습니다.
XslCompiledTransform을 사용하여 xsl로 처리하지만 컴파일 속도가 느리고 실행이 빠르기 때문에 XslCompiledTransform을 캐시해야합니다.
그래서 :
는이 빨리 피 묻은입니다으로 XSL을 통해 XML 변환, 깨끗한 코드를 유지하고 변화하는 일에 올 때 당신은 유연하고있어 전자 정렬 구현; 그것은 단지 하나의 xsl을 편집하는 것입니다.
나는 그래서 거기에 오타 될 수 있습니다 확인하지 않고이 입력하지만, 이것은 당신이 가야하는 방법입니다 :
XslCompiledTransform xsl = (XslCompiledTransform)HttpRuntime.Cache.Get("my_xsl");
if (xsl == null)
{
string fileName = "path/to/your/xslfile.xsl";
xsl = new XslCompiledTransform();
xsl.Load(fileName);
HttpRuntime.Cache.Insert("my_xsl", xsl, new CacheDependency(new string[]{fileName}));
}
과 같은 곳에 사용을하는 방법을 변환 :
public static XmlNode TransformToXml(IXPathNavigable xml, XslCompiledTransform xsl, XsltArgumentList arguments, XmlWriterSettings settings)
{
XmlDocument output = new XmlDocument();
using (XmlWriter writer = XmlWriter.Create(output.CreateNavigator().AppendChild()))
{
xsl.Transform(xml, arguments, writer);
}
return output;
}
제 경험으로 보면 XSL을 사용하는 것이 더 좋은 방법 중 하나입니다. 그러나 큰 입력 파일로 작업 할 때 전반적인 속도는 약간 비쌉니다.
당신은 자신의 정렬을 굴릴 수는 있지만 솔직히 나는 그것이 더 빠를 것이라고 상상하지 못합니다.
내가 생각할 수있는 유일한 다른 가능한 옵션은 데이터보기, 또는 무언가를로드하고 거기에 정렬하고 XML로 돌아 오는 것입니다.하지만 그 방법은 잘못된 것 같습니다.
EDIT - 추가 정보를 바탕으로 목록에로드하는 것이 훨씬 빠를 것이라고 확신합니다. 확인하려면 두 번 시도해야하지만 필요한 경우 어쨌든 다른 형식으로, 당신도 마찬가지입니다.
먼저 비효율적 인 노드 선택 방법 (예 : 노드)을 사용하지 않는지 확인하는 것이 좋습니다.