대용량 데이터 집합에서 XSL 변환 중에 메모리가 부족한 이전 .NET 1.1 응용 프로그램을 유지 관리하고 있습니다..NET 1.1의 XSL 변환 중 OutOfMemoryException
Dim xslDoc As New System.Xml.Xsl.XslTransform
Dim sourceStream As New System.IO.MemoryStream
Dim sourceStreamWriter As New System.IO.StreamWriter(sourceStream)
Try
' Load data and schema from DataSet
Dim sourceDoc As New System.Xml.XmlDocument
dataSet.WriteXml(sourceStreamWriter , XmlWriteMode.WriteSchema)
sourceStreamWriter.Flush()
sourceStream.Position = 0
sourceDoc.Load(sourceStream)
' Load XSLT
xslDoc.Load("c:\path\to\transform.xslt")
' Transform (FAILS HERE)
xslDoc.Transform(sourceDoc, Nothing, fileStream, New System.Xml.XmlUrlResolver)
Finally
schemaStreamWriter.Close()
schemaStream.Close()
End Try
내가 문제에 비슷한 질문을 찾았지만, 그들은 일반적으로 결과 XML 오히려 FileStream
보다 MemoryStream
에 기록 된 상황을 설명하거나 XslCompiledTransform
를 사용하여 참조 : XML은 FileStream
에 직접 기록 , 안타깝게도 .NET 2.0 이상에서만 사용할 수 있습니다.
변환하는 동안 메모리를 모두 사용하지 않으려면 어떻게해야합니까?
(여기에 유사 (답) 질문 : http://vbcity.com/forums/t/151286.aspx)
이 설정 작은 데이터를 사용할 수 있습니까 (지금의 경우, 클라이언트는 데이터가 여러 파일의 결과로 일괄로 분할하는 데 동의했다)? – harpo
실제로 그렇습니다. 수년 동안 계속해서 잘 돌아가고 있지만 데이터 세트는이 특정 인스턴스에서 처리하려고 시도한 것만 큼 큰 적이 없습니다. – bernhof
코드가 없으면 말할 수 없지만 XSLT에서 잘못 될 수있는 방법이 많이 있습니다. 변환을보다 효율적으로 만드는 일반적인 방법 중 하나는 중복 된 순회를 피하기 위해 작은 단계로 나누는 것입니다. 같은 효과를 내기 위해 키를 사용할 수도 있습니다. – harpo