문제

조언이 필요합니다. 텍스트 파일에서 이름과 주소가 포함 된 10,000 행을 XELEMENTS로 가져 오는 10,000 행을 가져 오는 응용 프로그램이 있습니다. 가져 오기가 완료되면 앱은 XELEMENTS를 Deenqueuing으로 처리하고 데이터베이스 호출을 작성하고 데이터베이스 출력을 요청 문서에 삽입하고 처리 된 문서를 출력 큐에 삽입하는 작업자 스레드를 스폰합니다. 모든 요청이 처리되면 출력 대기열은 XML 문서로 디스크에 기록됩니다.

처리 중에 요청에 필드를 추가 할 수있는 유연성이 필요했기 때문에 요청에 XELEMENTS를 사용했습니다. 즉, 작업 유형에 따라 앱은 공개 레코드 데이터베이스와의 이름/주소 일치를 기반으로 요청에 전화 번호, 생년월일 또는 이메일 주소를 추가해야 할 수도 있습니다.

내 질문은; XELEMENTS는 약간의 메모리를 사용하는 것처럼 보이며 문서가 처리 방법을 통해 진행됨에 따라 많은 구문 분석이 있다는 것을 알고 있습니다. 나는 Xelements를 사전 대상으로 대체하는 것을 고려하고 있지만 회의적이라는 것은 이익을 얻을 가치가 있습니다. 본질적으로 그것은 같은 것을 성취 할 것입니다.

생각?

도움이 되었습니까?

해결책

그래서 당신은 실제로 XML을 사용하지 않습니까? 당신은 그냥 사용하고 있습니다 XElement 이름/값 쌍의 모음으로? 그렇다면 나는 분명히 사전을 사용합니다. 나는 당신의 코드가 잠재적으로 더 깨끗해질 것으로 기대합니다.

반면에 XML을 진정으로 사용하고 있다면 아마도 고집하고 싶을 것입니다. XElement.

당신은 실제로 a 문제? 당신은 그것이 상당히 많은 메모리를 사용하고 있다고 말합니다. 충분한 메모리? 더 많은 기억을 살 수 있습니까? 기억을 저장하기 위해 몇 시간을 리팩토링하는 것보다 거의 저렴할 것입니다. (이 앱은 한 상자에서만 실행되는 것처럼 들립니다. 틀릴 수 있습니다. 더 널리 배포 될수록 최적화하는 데 시간을 할애하는 것이 더 합리적 일 것입니다.)

편집 : 알겠습니다. 더 많은 메모리를 구입하는 것은 실제로 실행 가능하지 않습니다. 그럼에도 불구하고 실제로 문제가 있습니까? 이것이 필요한 것보다 더 많은 메모리를 사용하는 것의 영향은 무엇입니까? 이게 뭐야 진짜 비용이 많이 드나요?

다른 팁

LINQ를 사용하면 트리를 사용하기 전에 전체 트리를 저장하지 않아도되는 경우 이해가 될 수 있습니다.

각 행에서 쿼리를 구축 할 때 가능한 한 많은 처리를 수행 할 것입니다.

그런 다음 쿼리 결과를 가져온 다음 처리하여 결과를 데이터베이스에 저장합니다.

이렇게하면 각 행을 필요할 때만 읽은 다음 처리 및 저장하므로 메모리 문제가 줄어 듭니다.

도움이 될 수 있습니다. http://www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

쿼리 결과를 가져 와서 각 고객을 통한 루프를 수행하고 레코드를 저장하십시오.

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top