コメントでLadislavがすでに示しているように、パフォーマンスを向上させるには、自動変更検出を無効にする必要があります。
context.Configuration.AutoDetectChangesEnabled = false;
この変更検出は、DbContext
APIでデフォルトで有効になっています。
APIとのDbContext
動作が大きく異なる理由は、自動変更検出が有効になっている場合、APIの関数よりもObjectContext
多くの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
して適切な場所で手動で呼び出すことは高度であると見なされ、アプリケーションに微妙なバグを簡単に導入する可能性があるため、注意して使用してください。