Entity Framework Contains()
Leistungsprobleme
Entity Frameworks Contains()
-Methode ist für Leistungs Engpässe berüchtigt. Dies ergibt sich aus seiner Übersetzung in eine Reihe von oder Aussagen anstelle einer effizienteren Klausel innerhalb der Datenbankabfrage. Zum Beispiel übersetzt Contains({1, 2, 3, 4})
einen komplexen Ausdruck wie ((1 = @i) OR (2 = @i)) OR ((3 = @i) OR (4 = @i))
, den viele Datenbanksysteme schlecht verarbeiten. Diese Ineffizienz wird weiter durch das Potenzial für Baumausgleichsprobleme und Stapelüberläufe während der Erzeugung von Abfragen verstärkt.
Mehrere Strategien können die Leistung verbessern:
1. Chunking -IDs: große Eingangslisten in kleinere Stücke zerlegen. Verarbeiten Sie jeden Chunk mit einer separaten Abfrage. Dies verringert die Komplexität des erzeugten SQL, erfordert jedoch eine sorgfältige Behandlung potenzieller Duplikate in den Eingabedaten.
2. Benutzerdefinierte Chunked -Methode: eine benutzerdefinierte Methode entwickeln, die einen Parameter der Chunk -Größe akzeptiert. Dies bietet eine größere Kontrolle und Anpassungsfähigkeit an unterschiedliche Merkmale der Datenbankleistung.
3. Kompilierte Abfragen: Verwenden Sie kompilierte Zeit, um die Abfrage vorzubinden. Dies isoliert die Phase der Abfragegenerierung und hilft, festzustellen, ob die Verlangsamung aus der Erstellung von Abfragen oder dem Abruf von Daten stammt. Denken Sie jedoch daran, dass CompiledQuery Einschränkungen aufweist, insbesondere seine Inkompatibilität mit Array oder IEnumerable
Parametern direkt.
4. Zukünftige EF -Verbesserungen: Das Entity Framework -Team ist sich dieser Einschränkung bewusst und plant, die In -Klausel in zukünftigen Versionen direkt zu unterstützen und die Leistung erheblich zu steigern. Contains()
-Betreiber von Entity Framework verbunden ist, und bietet praktische Lösungen, um dieses gemeinsame Problem zu mildern. Contains()
Das obige ist der detaillierte Inhalt vonWarum ist der „Contains()'-Operator von Entity Framework so langsam und wie kann ich seine Leistung verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!