2011-04-13 6 views
0

오늘 밤 질문 모드입니다.EF 4.1 Sql CE 성능 문제

데스크톱 응용 프로그램을 작성하는 중입니다. 운좋게도 다음과 같은 문제가 발생하여 오픈 아키텍처를 선택했습니다.

내 응용 프로그램을 사용하면 사용자가 작업을 추가 할 수 있습니다. 내 테스트에서 나는 쉽게 관리 할 수있는 작은 (테스트) 작업 만 추가했습니다. 각 작업은 현재 SQL CE 4.0 데이터베이스 인 데이터 저장소에 추가됩니다 (EF 4.1 코드를 사용하여 액세스 됨).

이제는 더 큰 (데이터베이스에서 대략 4000 행) 일반적인 작업을 사용하여 응용 프로그램을 테스트했습니다. 오히려 몇 초가 걸리므로 실제로 삽입하는 데 몇 분이 걸립니다! 큰 테이블에는 외래 키가 1 개뿐 아니라 기본 키가 있습니다.하지만 4000 개의 행이 그럴 것입니다.

모든 행이 일괄 처리로 삽입되며 실제 성능 부족은 SaveChanges 명령에 있습니다.

수동 쿼리 (havent 테스트) 사용에 대해서는 적색이지만 트랜잭션은 지원되지 않으며 격리 된 작업이어야하므로 선호되는 옵션이 아닙니다.

여기에 새로운 전략이 필요합니까? SQL Server 2008에서는 대량 삽입을 할 수 있지만 SQL Server CE에서도 지원되지 않습니다.

SQL Server CE 및 경량급 클라이언트 솔루션은 어떤 것이 있습니까? (예 : Ofcourse를 사용하면 사용자가 SQL Server를 설치하거나 일부 기본 구성 요소를 사용하지 않아도됩니다.)

몇 가지 형태로 직렬화를 사용할 수 있지만 휠의 재발 명과 같은 느낌이며 작업 (업그레이드, 무결성, 다중 스레드 액세스 등)이 많습니다.

미리 감사드립니다.

+0

삽입하려는 테이블에 많은 색인이 있거나 많은 조인이 있습니까? 인서트가 몇 분 걸리면 4000 행이 너무 작아 보입니다. – taylonr

+0

아니요, 인덱스가 없습니다. 단지 외래 키가 1 개이고 기본 키가 1 개입니다. 실제로, 단지 4 개의 정수만있는 열이 4 개 있습니다. – Polity

+0

문제는 intellitrace가없고 실제로는 SaveChanges 내부에있는 것을 볼 수 없다는 것입니다.나는 그 시간이 단지 많은 양의 데이터만으로 소비된다는 것을 알았습니다. – Polity

답변

0

두 답변 모두 도움이되었지만 해결책을 제공하지 못했습니다.

이 항목은 http://sqlcebulkcopy.codeplex.com/이며 2 초 내에 삽입하고 처리하는 SqlCeBulkCopy 클래스를 제공합니다. 현재 현재 저장소와 단위 작업 모델에서 통합 작업을하고 있습니다. 최대한 빨리 내가 ​​여기에 게시 할 최고의 솔루션을 발견했다.

곧 추후에 ...

0

질문은 SQL CE에서 정상적으로 삽입 작업이 얼마나 느린 것입니까? EF의 문제점은 하나의 일괄 처리에 4.000 개의 레코드를 삽입하도록 요청하지 않지만 하나씩 레코드를 삽입한다는 것입니다. 현재 EF 버전은 명령 일괄 처리를 지원하지 않으므로 시퀀스에 4.000 삽입을 실행합니다. 이것은 큰 SQL Server에서도 문제가되지만 일반적으로 더 빠릅니다. 나는 느린 바탕 화면에서 6 분 안에 그리고 서버에서 3 분 이내에 SQL Server에 약 50.000 - 100.000 개의 복잡한 레코드를 삽입 할 수있었습니다.

관련 문제