이 문서에서는 EF(Entity Framework) 6 비동기 작업을 사용할 때 발생하는 일반적인 문제, 즉 동기 작업에 비해 상당한 성능 저하를 살펴봅니다. 이 동작의 원인을 자세히 알아보고 해결 방법을 제공하겠습니다.
사용자는 Entity Framework 쿼리를 비동기식 쿼리로 전환할 때(예: ToList() 대신 ToListAsync() 사용) 상당한 속도 저하를 경험하는 경우가 많습니다.
SQL Server Profiler를 사용하여 조사한 결과 동기식 및 비동기식 EF 호출 모두에 대해 기본 SQL 쿼리가 동일하게 유지된다는 사실을 발견했습니다. 그러나 비동기 작업은 실행하는 데 훨씬 더 오랜 시간이 걸립니다.
성능 차이는 EF 6 비동기 작업의 내부 구현 세부 사항으로 인해 발생합니다. 동기 버전과 달리 비동기 버전은 버퍼링 메커니즘을 사용하여 비순차적 방식으로 데이터베이스에서 데이터를 읽습니다. 이 접근 방식은 경우에 따라 성능을 향상시키기 위한 것이지만 큰 이진 데이터 열을 처리할 때 부정적인 영향을 미칠 수 있습니다.
버퍼링 프로세스에는 많은 수의 비동기 작업이 생성되므로 작업 생성, 동기화 및 스레드 사용 측면에서 많은 오버헤드가 발생합니다. 비순차적 데이터 읽기와 결합된 이러한 오버헤드는 상당한 성능 저하를 초래합니다.
이 문제를 완화하려면 이진 데이터 열이 포함된 테이블에 EF 6의 비동기 작업을 사용하지 않는 것이 좋습니다. 대신, 필요한 경우 TaskCompletionSource
EF 6의 비동기 작업은 경우에 따라 성능을 향상시킬 수 있지만 현재 구현된 방식은 대규모 바이너리 데이터를 처리할 때 상당한 오버헤드를 유발할 수 있습니다. 개발자는 이러한 제한 사항을 인지하고 필요한 경우 대안 사용을 고려해야 합니다.
위 내용은 내 Entity Framework 6 비동기 작업이 동기 작업보다 10배 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!