Frage

Hey Leute, hier ist die Frage,

Im Grunde, Ich habe eine sehr große Liste enthält wiederum relativ große Wörterbücher

Also im Grunde, ich habe eine sehr große in Speicher-Sammlung.

ich serialisiert dann diese Sammlung manuell zu XML, und senden Sie es über http. Unnötig zu sagen, die XML zu groß sind, manchmal so groß, ich eine OutOfMemory Ausnahme erhalten, bevor auch nur zu versuchen, sie zu senden.

In .NET, wie würde ich mich über potenzielle Speichernutzung zu berechnen. Zum Beispiel, in diesem Fall muß ich die XML in Stücke brechen, durch die Verarbeitung nur geringe Mengen der Sammlung an eine Zeit.

Wie kann ich die Größe des einzelnen „chunk“ effizient berechnen on-the-fly. Ich will nicht eine beliebige Zahl wie „Prozess 100 Artikel zu jeder Zeit“ holen, ich möchte wissen, etwa, wie groß die einzelnen Blöcke für einen Einzelfall sein sollte.

cheers

UPDATE

Obwohl @Jacob die beste Lösung für dieses spezielle Problem zur Verfügung gestellt, die konzeptionelle Struktur der App selbst ist fehlerhaft.

Tatsächlich ist die Lösung, die einen Bruchteil Ihrer Nachricht auszuführen, um zu berechnen, wie potenziell groß wird die Nachricht sein, wenn sie mit einer Sammlung zu arbeiten.

Sie dann jede akzeptabler Größe Einheit senden, eins nach dem anderen.

Das ist aber nur ein Hack. Die wirkliche Lösung ist entweder auf einen Weg finden, keine großen Nachrichten zu übergeben, oder ein völlig anderes Protokoll zusammen verwendet werden.

Es gibt einen interessanten Beitrag zum Thema hier obwohl wenn Sie SOAP verwenden möchten, jedoch habe ich beschlossen, zu senden so viele Daten einen Weg, um zu finden.

War es hilfreich?

Lösung

Ich glaube, Sie könnten sonst ein konzeptionelles Problem mehr als alles andere haben. „Berechnen Sie potenzielle Speichernutzung“ steht im Widerspruch zu „effizient die Größe der einzelnen Brocken berechnen“. Der einzige Weg, auf wirklich auf der Speicherauslastung auf den Grad der Genauigkeit, wo Sie ausreichend Chunkgröße vorhersagen können, ist auf wirklich macht Ihre Conversion.

Es klingt wie der beste Weg zu kommen, um diese effizient progressiv sein könnte es zu bewältigen - im Wesentlichen, was diejenigen, die Streaming-Objekte sind darauf hindeutet, sagen. Wenn Sie nicht unbedingt Streaming nutzen können, möchten Sie wahrscheinlich Ihre Serialisierung strukturieren, so dass Sie eine begriffliche Einheit zu einer Zeit, Fortschritt (das heißt ein Element in der Liste mit seinem Begleiter Wörterbuch Kinder).

Andere Tipps

Warum Sie nicht nur den Datenstrom, so dass Sie nur in XML on the fly konvertieren eine große XML-Datei im Speicher vermieden zu haben?

Wie senden Sie es? Sie sollten so durch WCF tun, die Streaming tun können. Es wäre auch eine Wahl geben, durch die Konfiguration, ob XML oder binär zu verwenden, oder was auch immer.

Wenn es ein Problem ist, zu senden ist es nicht auch ein Problem zu erhalten? Sie klingen wie Sie versuchen, die Hälfte ein Problem zu lösen. XML ist eine große no-no für große Daten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top