Ich würde für eine bisher noch nicht erwähnte Option (außer in Kommentaren vielleicht) gehen, die im Thema von my blog post about blobstreams erwähnt wird: Einrichten einer Verarbeitungs-Pipeline von Streams, die das Herunterladen und Interpretieren der Datei, die Sie benötigen, kümmern. Verwenden Sie dann Code, um interpretierte Datensätze aus diesem Compound-Stream zu lesen, und führen Sie die erforderlichen Einfügungen/Aktualisierungen in Ihrer Datenbank innerhalb einer Transaktion durch (pro Datei/pro Datensatz gemäß Ihren funktionalen Anforderungen).
Diese Art von Szenario ist, wo Stream
basierte Klassen übertreffen. Es würde bedeuten, dass Sie niemals die gesamte Datei während der Verarbeitung irgendwo auf der Festplatte oder im Speicher haben. Wie Sie erwähnten, dauert das Herunterladen der Datei Minuten, sie könnte groß sein. Kann Ihr System die Zwischenspeicherung der gesamten Datei übernehmen (vielleicht mehr als einmal: Speicher und Festplatte)? Selbst wenn mehrere Dateien gleichzeitig verarbeitet werden? Wenn Sie in der Praxis herausfinden würden, dass die Kette nicht zuverlässig genug für Sie ist und Sie die heruntergeladene Datei vorübergehend auf der Festplatte speichern möchten und in der Tat die Verarbeitung wiederholen möchten, ohne sie herunterladen zu müssen es ist wieder so einfach. Alles, was benötigt wird, ist eine extra Stream
in der Pipeline, die prüfen würde, ob die benötigte Datei bereits in Ihrem "bereits heruntergeladenen Dateien" -Cache (in irgendeinem Ordner, in isoliertem Speicher, was auch immer) ist und die Bytes zurückgibt, anstatt tatsächlich a Herunterladen von Stream
in Ihre Verarbeitungspipeline.
+1 für IsolatedStorageFileStream –