FIX: 다중 스레드 시나리오에서 XslTransform을 사용하는 경우 System.InvalidOperationException 오류

이 문서는 이전에 다음 ID로 출판되었음: KR320011
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
현상
다중 스레드 간에 System.Xml.Xsl 네임스페이스의 XslTransform 개체를 공유하는 경우 응용 프로그램을 작성할 때 아래와 같은 오류 메시지가 나타날 수 있습니다.
System.InvalidOperationException: 컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수도 있습니다.
호출 스택은 다음과 같이 나타날 수 있습니다.
at System.Collections.ArrayListEnumeratorSimple.MoveNext()    at System.Xml.XPath.XsltFunction.SetXsltContext(XsltContext context)    at System.Xml.XPath.CompiledXpathExpr.SetContext(XmlNamespaceManager nsManager)    at System.Xml.Xsl.Processor.GetValueQuery(Int32 key)    at System.Xml.Xsl.Processor.ValueOf(ActionFrame context, Int32 key)    at System.Xml.Xsl.ValueOfAction.Execute(Processor processor, ActionFrame frame)    at System.Xml.Xsl.ActionFrame.Execute(Processor processor)    at System.Xml.Xsl.Processor.Execute()    at System.Xml.Xsl.XslTransform.Transform(IXPathNavigable input,XsltArgumentList args, TextWriter output)
이 문제는 단일 프로세서 컴퓨터에서 발생할 수도 있지만 둘 이상의 프로세서가 있는 컴퓨터에서 주로 발생합니다.
원인
이 문제는 System.Xml.dll 어셈블리의 버그 때문에 발생합니다.
해결 방법
이 문제를 해결하려면 Microsoft .NET Framework용 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
318836 INFO: 최신 .NET Framework 서비스 팩을 구하는 방법
참고: Microsoft .NET Framework와 서비스 팩 1이 이미 설치된 시스템에 이 수정 프로그램을 적용하십시오.

이 수정 프로그램의 한글 버전은 아래와 같거나 그 이상의 파일 특성을 가집니다.
   날짜          버전              크기             파일 이름   -------------------------------------------------------------   03-APR-2002   1.0.3705.223   1,294,336 bytes   System.Xml.dll	

해결 방법

이 문제를 해결하려면 lock 문(Microsoft Visual C# .NET) 또는 SyncLock...End SyncLock 구문(Microsoft Visual Basic .NET)을 사용하여 Transform 메서드의 사용을 보호하십시오. 그러나 이 해결 방법은 응용 프로그램 설계와 목적에 따라 허용할 수 없는 성능 손실이 발생할 수 있습니다.

더 나은 성능을 제공하는 다른 해결 방법은 N +1 XslTransform 개체의 풀 또는 캐시를 구현하는 솔루션을 만드는 것입니다. 여기서 N은 컴퓨터에 있는 프로세서 수입니다.
현재 상태
Microsoft는 본 문서의 시작 부분에 나열한 제품에서 이 문제를 확인했습니다. 이 문제는 Microsoft .NET Framework 서비스 팩 2(SP2)에서 처음 수정되었습니다.
multi threaded multiproc proc exception managed
속성

문서 ID: 320011 - 마지막 검토: 02/10/2014 14:16:49 - 수정: 1.0

  • Microsoft .NET Framework 서비스 팩 1
  • Microsoft .NET Framework Software Development Kit 1.0
  • kbnosurvey kbarchive kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix kbnokeyword KB320011
피드백