2008-10-02 1 views
0

XML 파일을 읽는 프로세스가 있습니다. XMLTextReader 클래스를 사용하여 XML 전달자, 전달자 만 빠른 XML 파서/판독기로 간주되기 때문에이 작업을 수행합니다..NET 1.1의 XMLTextReader

1 메가 바이트 테스트 파일에서 잘 작동하지만 라이브 시스템에서 12 메가 파일로 작업 할 때 완전히 멈 춥니 다.

내 자신의 XML 판독기를 작성하는 것 외에 다른 해결책이 있습니까? 이것이 세계의 끝이 아니지만 가능한 경우 사용 가능한 표준 구성 요소를 사용하는 것이 더 좋을 것입니다.

답변

0

나는 비슷한 성능 문제를 경험했습니다. 필자는 DTD/스키마에 대해 원격으로 해결하려고 시도했다. 이러는거야? 가능한 경우 XmlTextReader.XmlResolver를 null로 설정하십시오.

+0

감사하지만 XMLResolver 속성이이 인스턴스에 설정되어 있지 않습니다. – user6690

1

SAXExpat 정말 좋았습니다. Expat은 XML 파서이며 거의 참조 구현입니다. TCP 연결을 통해 전송 된 일부 동기화 XML 파일을 읽는 데 사용하는 것을 기억합니다. 문제가없는 대용량 파일 (약 50MB). 그리고 3/4 년 전, .NET 1.1과 정말 엉터리 컴퓨터였습니다.

0

독자가하는 일에 따라 다릅니다. 이 문제를 해결하기 위해 XML DOM이나 객체 모델에 넣고 있습니까? 그렇게하면 어떤 언어 나 라이브러리를 사용하든 관계없이 대용량 메모리를 사용할 수 있습니다.

어쩌면 1.1에 결함이있어 2.0을 사용해 보려고 생각했을까요? 내 1.1 일 안에 XmlTextReader를 사용한 적이 없으므로 보증 할 수는 없지만 2.0 이후로는 완벽합니다.

+0

안녕하세요 - 데이터가 SQLServer 2000 데이터베이스에 게시되고 있습니다. 이 프로세스는 많은 메모리가있는 4 개의 프로세서 서버에서 실행됩니다. 나는이 프로젝트에서 사용하고있는 프레임 워크 버전을 바꿀 수있는 입장이 아닙니다. 잠시 후에 작성된 기존 응용 프로그램의 일부이기 때문입니다. – user6690

+0

남자, 유산은 엉망이야? 이 권리를 갖도록하겠습니다. 예를 들어 (reader.LocalName == "insert-user") InsertIntoDB (reader.ReadInnerXml()) (더 많은 행)라고 말하면됩니까? * all *에 DOM을 넣으면 고통을 겪을 것입니다. –

1

문제가 XmlTextReader에 있으면 매우 놀랍습니다.

XmlTextReader를 만드는 테스트 프로그램을 작성하는 데 몇 분을 소비하고 문서의 끝에 도달 할 때까지 Read()를 사용하여 파일의 각 노드를 읽는 경우, 버터를 통해 뜨거운 칼처럼 12mb 파일을 확대합니다. 이 문제가 발생하면 시도해 볼 수있는 첫 번째 방법입니다.

XmlTextReader를 문제의 원인으로 제거한 후에는 실제로 문제가되는 원인에 집중할 수 있습니다. 코드가 아닌 노드를 처리하는 코드 일 수 있습니다. 노드를 읽습니다.

0

한 가지 생각. 전체 프로세스 기간 동안 데이터베이스 트랜잭션을 여는 중입니까? 그렇다면 트랜잭션없이 시도하거나 적어도 프로세스 중에 더 자주 커밋하십시오.

0

소프트웨어를 판매하거나 외부에 판매하지 않는 경우 Mono에서 리더를 가져 와서 문제가 해결되는지 확인할 수 있습니다.