>백엔드 개발 >C++ >내 Entity Framework 비동기 작업이 동기 작업보다 10배 느린 이유는 무엇입니까?

내 Entity Framework 비동기 작업이 동기 작업보다 10배 느린 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-10 18:46:42519검색

Why is My Entity Framework Async Operation 10x Slower Than Its Synchronous Counterpart?

Entity Framework Async: 심각한 성능 병목 현상

이 문서에서는 Entity Framework의 비동기 메서드를 사용하는 동안 발생하는 성능 문제에 대해 자세히 설명합니다. 저자는 동기 쿼리에 비해 비동기 쿼리의 실행 시간이 10배 증가한다는 사실을 발견했습니다.

문제: 동기 쿼리는 몇 초 안에 완료되지만 비동기 쿼리는 10배 더 오래 걸립니다.

문제 디버깅: SQL Server Profiler는 동기 호출과 비동기 호출 모두에 대해 동일한 SQL 쿼리를 확인했습니다. 추가 조사를 통해 원인이 밝혀졌습니다. 비동기 작업으로 인해 200만 개가 넘는 작업이 생성되고 상당한 오버헤드가 발생했습니다.

근본 원인: 이 문제는 Entity Framework 6의 비동기 구현 버그로 인해 발생했습니다. 큰 이진 열이 포함된 테이블을 처리할 때 프레임워크는 비동기 호출에서 CommandBehavior.SequentialAccess 플래그를 자동으로 활용해야 합니다. 이 중요한 최적화가 누락되었습니다.

해결 방법: 저자는 Entity Framework에 내장된 비동기 메서드를 우회할 것을 제안합니다. TaskCompletionSource을 사용하는 해결 방법을 사용하면 수동 비동기 실행이 가능하여 대규모 바이너리 데이터가 있는 테이블에 CommandBehavior.SequentialAccess가 올바르게 적용되도록 할 수 있습니다.

주요 관찰:

  • Ado.Net은 큰 바이너리 열과 CommandBehavior.Default이 포함된 테이블에서 비동기 작업을 수행할 때 유사한 성능 저하를 나타냅니다.
  • 성능 차이는 큰 바이너리 열(저자 테스트에서 256KB)에서 가장 두드러졌습니다.
  • CPU 사용 패턴은 특이했습니다. 동기 작업에서는 CPU를 12% 사용했지만 비동기 작업에서는 최대 20%를 사용하여 잠재적인 리소스 경합을 암시했습니다.

위 내용은 내 Entity Framework 비동기 작업이 동기 작업보다 10배 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.