Frage Redis auf Windows / C # beschleunigen


Ich experimentiere mit Redis auf meinem lokalen Rechner. Bisher habe ich es aber funktioniert sehr langsam.

Ich habe ein Array von etwa 14.000 Objekten, und das Abrufen dauert immer etwas mehr als 3 Sekunden, was für Produktionszwecke offensichtlich zu langsam ist.

Ich habe das Gefühl, dass die meiste Zeit damit verbracht wird, die Objekte zu deserialisieren, aber ich bin mir nicht wirklich sicher, ob ich irgendetwas tun kann, um das zu korrigieren.

Kann ich sie an erster Stelle speichern, ohne sie zu serialisieren (wenn das sinnvoll ist)? Kann ich den Deserialisierungsprozess beschleunigen, wenn dies nicht gelingt? Ich habe ISerialization implementiert, aber es scheint keinen Unterschied zu machen.

Als Referenz verwende ich die ServiceStack-Anpassung von Redis.


5
2018-04-10 16:16


Ursprung


Antworten:


Wenn Sie nicht messen, werden Sie es nicht wissen.

[Quelle: Ein kluger Entwickler von mir, circa 1992!]

Bevor Sie mit den Fingern auf die mutmaßlichen Täter zeigen, sollten Sie zuerst Ihren Code profilieren / messen, um genau festzustellen, wo Ihr Leistungsproblem liegt. Dann implementieren Sie eine Korrektur und messen Sie erneut. Wiederholen Sie dies, bis Ihre Leistung zufriedenstellend ist.

Es gibt viele Profiler zur Verfügung, einschließlich Der in Visual Studio integrierte ProfilerAndere sind als Add-Ins verfügbar (z.B. RedGates Ameisen-Profiler, JetBrains 'dotTrace oder Teleriks JustTrace, etc.)

Alternativ versuchen Sie es mit Trace.WriteLine(...) und Stopwatch um Ihren Code zu instrumentieren, um herauszufinden, wie lange die Datenzugriffsoperationen ausgeführt werden und wie lange es dauert, die Daten zu deserialisieren.

FWIW, ich wäre überrascht, wenn ein Redis-Build so langsam läuft, wie Sie es unter Windows oder einem anderen Betriebssystem sehen. Heck, sogar SQL Server Express (2012) kann 199000 Zeilen zurückgeben und sie in weniger als 1s in einer CSV speichern: enter image description here


3
2018-04-27 00:42