쿼리 문자열을 통해 전달 된 기준에 따라 XML 피드를 즉시 생성하는 웹 응용 프로그램이 있습니다.CPU 집중 XmlTextWriter
매우 간단한 응용 프로그램입니다. 쿼리 문자열 변수를 읽고이를 사용하여 데이터 (데이터베이스의 캐시 된 데이터)를 적절한 XML 형식으로 포맷합니다.
반환되는 XML 파일의 크기는 약 25MB입니다. 많은 데이터가 있습니다.
XmlTextWriter를 사용하여 XML을 작성한 다음이를 요청자에게 "application/octet-stream"(다운로드 할 수있는 첨부 파일)으로 반환합니다.
질문 : XML을 작성하는 것이 CPU의 100 %를 사용하는 것으로 보이고 내 다른 응용 프로그램에서 문제를 일으키는 것 같습니다.
대형 XML 파일을 작성한 경험이있는 사람이 있습니까? 프로세스의 CPU 사용량을 줄이는 데 도움이되는 정보는 무엇입니까?
코드 샘플은 다음과 같습니다
map.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
map.WriteStartElement("rss");
map.WriteAttributeString("version", "2.0");
map.WriteAttributeString("xmlns:g", "http://base.google.com/ns/1.0");
map.WriteStartElement("channel");
map.WriteElementString("link", "http://www.mywebsite.com...");
ProductCollection items = Product.GetCachedSiteProducts();
foreach (Product p in items)
{
map.WriteStartElement("item");
........
map.WriteElementString("description", p.Description);
map.WriteElementString("g:id", p.SiteSku);
map.WriteElementString("g:condition", "new");
map.WriteElementString("g:price", p.Price.ToString() + " USD");
...............
map.WriteEndElement(); //item
}
}
map.WriteEndElement();//channel
map.WriteEndElement();//rss
Response.Write(sw.ToString());
업데이트 : 내가 .. 더 많은 코드를 게시하라고 사람들 덕분에 내 자신의 질문에 대답하고 좀 더 신중하게 보았을 때, 이것은 쉬운 일이었다.
코드는 "Response.write (map.ToString())"을 사용하여 xml을 출력하고있었습니다. 와우, 그건 비효율적이야. 코드를 업데이트합니다. 모두에게 감사드립니다! 떠오르는
실제로 XMLStream을 빌드하는 데 사용하는 코드를 게시 할 수 있습니까? 거기에는 약간의 소비 문제가있을 수 있습니다. 내 의견으로는 일부 코드를 보지 않고도 알 수는 없습니다. – MethodMan
필요한 셸을 만들 수있는 방법이 있습니까? 값을 입력하십시오. 즉, 시간의 100 %를 다시 작성하지 마십시오. 응답 캐싱을 고려 했습니까? –
우리는 100MB가 넘는 XML 파일을 만들고 100 % CPU를 사용하지 않습니다 ... 그래서 어떻게 든 소스 코드를 보여줄 필요가 있다고 생각합니다 ... – Yahia