2016-09-01 2 views
0

Ich habe eine. NET-Anwendung mit Anwendungspool (IIS) auf einem Computer und SQL Server auf einem anderen Computer. Anwendung verwendet Entitätsframework, um mit DB zu arbeiten. Ich habe zwei Möglichkeiten, um meine Aufgabe zu lösen (Daten von db holen). Bei Beispiel habe ich die Liste der Entity1 in der Anwendung und ich muss die Liste der Entity2 von DB erhalten (Entity2 ist mit Entity1 durch Fremdschlüssel verbunden). Ich habe 2 Möglichkeiten, es zu tun.Entity Framework RPC vs Batch-Leistung

erste ist eine Stapelanfrage an die DB zu machen:

public List<Entity2> GetEntities(List<long> entity1IDs) 
{ 
    db.Entity2.Where(e2 => entity1IDs.Contains(e2.Entity1ID)).ToList(); 
} 
... 
var entities2 = GetEntities(entities1.Select(e => e.Entity1ID).ToList()); 
foreach (var entity2 in entities2) 
{ 
    ... 
} 

zweite ist auf n-RPC-Anforderungen an die DB zu machen:

foreach (var entity1 in entities1) 
{ 
    var entity2 = entity1.entity2; 
    ... 
} 

Ich bin ziemlich sicher, dass erste Option muss besser haben Leistung, weil es nur eine Anfrage an die DB gibt. Aber wie wirkt sich dies auf den Anwendungspool aus? Ja, es ist nur eine Anfrage, aber es sind viele dynamische Daten im Speicher in einer Zeiteinheit. Und wenn wir Millionen von Datensätzen in DB haben, dann haben wir eine große Anfrage an die DB mit hoher Speicherauslastung im App-Pool und CPU-Nutzung, um mit großer Datenmenge (Option 1) im Vergleich zu Millionen von Anfragen an DB mit geringer Speicherauslastung in der App zu arbeiten Pool- und CPU-Nutzung.

Wie auch immer ich bin geneigt, die erste Option, aber möchte mehr Argumente und vielleicht einige Praxis Ergebnisse und Analyse wissen.

Gibt es auch ein Analysetool, um zu verfolgen, wie viel CPU-Nutzung für den Anwendungspool mit SQL arbeitet und wie viel mit Daten im Anwendungspool arbeiten wird, um einen Vergleich zu erstellen?

+1

Schlüsselwörter "Benchmarking" und "Profiling", die _you_ tun müssen. Es gibt keine Lösung für dieses Problem, es hängt von zu vielen Variablen ab. – CodeCaster

+0

@CodeCaster Ja, darum habe ich nach Analysetools für den Anwendungspool gefragt, um Praxistests zu machen und die beste Lösung für meine Situation zu bekommen. –

Antwort

0

Das Problem, auf das Sie stoßen, hängt von Ihren Serverressourcen ab und davon, was Sie teurer finden. Normalerweise ist Speicher billig, aber Netzwerk ist teurer und Leistung ist mehr ein Problem.

Was Sie tun, ist zu versuchen, Ihre Lösung zu optimieren, bevor Sie tatsächlich ein relevantes Problem konfrontiert. Ich würde mit dem ersten gehen, da Netzwerk normalerweise ein Problem ist, und das Erstellen einer Verbindung jedes Mal kann die Leistung beeinträchtigen. Wenn Sie aufgrund Ihrer großen Anfrage tatsächlich Probleme haben - was in den meisten Systemen sehr unwahrscheinlich ist - sollten Sie sich überlegen, wie Sie Ihren Code an Ihre speziellen Anforderungen anpassen können.

Verwandte Themen