Entity Framework Async: 심각한 성능 병목 현상
이 문서에서는 Entity Framework의 비동기 메서드를 사용하는 동안 발생하는 성능 문제에 대해 자세히 설명합니다. 저자는 동기 쿼리에 비해 비동기 쿼리의 실행 시간이 10배 증가한다는 사실을 발견했습니다.
문제: 동기 쿼리는 몇 초 안에 완료되지만 비동기 쿼리는 10배 더 오래 걸립니다.
문제 디버깅: SQL Server Profiler는 동기 호출과 비동기 호출 모두에 대해 동일한 SQL 쿼리를 확인했습니다. 추가 조사를 통해 원인이 밝혀졌습니다. 비동기 작업으로 인해 200만 개가 넘는 작업이 생성되고 상당한 오버헤드가 발생했습니다.
근본 원인: 이 문제는 Entity Framework 6의 비동기 구현 버그로 인해 발생했습니다. 큰 이진 열이 포함된 테이블을 처리할 때 프레임워크는 비동기 호출에서 CommandBehavior.SequentialAccess
플래그를 자동으로 활용해야 합니다. 이 중요한 최적화가 누락되었습니다.
해결 방법: 저자는 Entity Framework에 내장된 비동기 메서드를 우회할 것을 제안합니다. TaskCompletionSource
을 사용하는 해결 방법을 사용하면 수동 비동기 실행이 가능하여 대규모 바이너리 데이터가 있는 테이블에 CommandBehavior.SequentialAccess
가 올바르게 적용되도록 할 수 있습니다.
주요 관찰:
CommandBehavior.Default
이 포함된 테이블에서 비동기 작업을 수행할 때 유사한 성능 저하를 나타냅니다.위 내용은 내 Entity Framework 비동기 작업이 동기 작업보다 10배 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!