Ladislav가 주석에서 이미 언급했듯이 성능을 개선하려면 자동 변경 감지를 비활성화해야합니다.
context.Configuration.AutoDetectChangesEnabled = false;
이 변경 감지는 DbContext
API 에서 기본적으로 활성화됩니다 .
API DbContext
와 다르게 작동 하는 이유 ObjectContext
는 자동 변경 감지가 활성화 된 경우 API의 함수보다 DbContext
API 의 더 많은 함수가 DetectChanges
내부적으로 호출 ObjectContext
되기 때문입니다.
여기DetectChanges
에서 기본적으로 호출 되는 함수 목록을 찾을 수 있습니다 . 그들은:
Add
, Attach
, Find
, Local
, 또는 Remove
회원에DbSet
- 의
GetValidationErrors
, Entry
또는 SaveChanges
회원DbContext
Entries
에 방법DbChangeTracker
특히 귀하가 경험 한 성능 저하의 원인이되는 Add
통화 DetectChanges
.
이와 대조적으로 ObjectContext
API는 위에서 언급 한 다른 해당 메서드를 호출 하지 않고 DetectChanges
자동으로 호출 합니다 . 이것이의 기본 성능 이 더 빠른 이유 입니다.SaveChanges
AddObject
ObjectContext
DbContext
많은 기능 에서이 기본 자동 변경 감지를 도입 한 이유는 무엇 입니까? 확실하지 않지만, 그것을 비활성화 DetectChanges
하고 적절한 지점에서 수동으로 호출하는 것은 고급 으로 간주되고 응용 프로그램에 미묘한 버그를 쉽게 도입 할 수 있으므로 [it]를주의해서 사용하십시오 .