Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C# - 30 MB XML-Datei schnell übers Netzwerk auslesen - wie?

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich habe ein kleines Programm geschrieben, dass Daten verwalten kann.

Diese Daten habe ich lokal in eine XML-Datei gespeichert, quasi als kleine Datenbank.

Mit ReadXML() und WriteXML() habe ich die Daten in ein DataSet geladen bzw. in eine XML-Datei geschrieben. Das ging wunderbar.

Mit der Zeit ist das Programm gewachsen und ich sollte die Daten auf einem Server auslagern, so dass mehrere Personen damit abreiten können. Das ging mit ein paar kniffen auch noch.

Dummerweise ist die Datei jetzt auf 31 MB gewachsen und enthält etwa 3700 Datensätze.

Das Einlesen und Schreiben der XML-Datei dauert mittlerweile jeweils etwa 20 Sekunden.

Nun meine Frage: gibt es eine Möglichkeit das zu beschleunigen?

Oder bietet sich eine Datenbank an? Wenn ja welche? Reicht eine Access Datenbank?

Muss ich dabei etwas besonderes beachten?

Vielen Dank im Voraus!

Oder bietet sich eine Datenbank an?

ja, weil

[...], so dass mehrere Personen damit abreiten können.

Reicht eine Access Datenbank?

bedingt, weil

[...], so dass mehrere Personen damit abreiten können.

Access kann nicht einzelne datensätze sperren, sondern immer nur die gesamte Tabelle

deswegen kann es sein, dass du eine andere Datenbank verwenden müsstest

grundsätzlich ist es aber egal, welche du verwendest

du solltest aber auch kein DBMS wählen, welches dazu gedacht ist, in eine Anwendung integriert zu werden (wie SQLite)

jede Instanz des DBMS sperrt die gesamte Datenbank, sodass kein Zugriff mehr von anderen Instanzen deiner Anwendung mehr besteht

LINQ ist der C# Weg, wenn es um XML-Parsing geht.

Stichwort »XDocument«.

Allerdings ist es vergeudete Liebesmüh, sowas mit C# Boardmitteln auswerten zu wollen.

Eine ordentliche Datenbank mit einem Webservice davor wäre eine architektonisch saubere Lösung.

Eine ordentliche Datenbank mit einem Webservice davor wäre eine architektonisch saubere Lösung.

Ein Webservice ist in den meisten Fällen wieder ein Nadelöhr, so dass man sich direkt nativ an die Datenbank hängen sollte (sofern möglich)

Ein Webservice ist in den meisten Fällen wieder ein Nadelöhr

Grundsätzlich ja.

so dass man sich direkt nativ an die Datenbank hängen sollte (sofern möglich)

Was dadurch nicht unbedingt gerechtfertigt würde.

So groß sind die Einbußen nicht.

Im Übrigen läßt sich das recht fix umsetzen:

Introducing WCF WebHttp Services in .NET 4 - The .NET Endpoint - Site Home - MSDN Blogs

HowTo: JSON / AJAX – Webservices mit WCF erstellen | Code-Inside Blog

Wenn du es nicht zwingend als verteilte anwendung bauen willst(was bei so einem kleinen Projekt wohl kaum Sinn macht) würde ich das auch direkt an die DB klemmen. Warum die Zeremonie mit nem Webservice?

Weil Du a) offen für Erweiterungen bleibst und B) eine Abstraktionsschicht mehr in Deiner Anwendung hast; was letztendlich Deine Lösung flexibel hält.

Die Gretchenfrage ist da denke ich WIE man auf die Daten zugreifen möchte.

Wenn man über eine Intranet Seite, oder mehrere Tools darauf zugreifen möchte, würd ich definitiv auch einen Webservice aufsetzen, der sich dann auf die Datenbank connectet. Dann hätte man eine einheitliche Schnittstelle, was immer was schönes ist. (Lässt sich aber auch über ne DLL lösen die man sich schreiben könnte für den DB Zugriff, Intranet hier mal ausgeklammert)

Wenn ich nur über >eine< Applikation zugreifen möchte, die mehrere User verwenden, würde ich direkt in der Applikation den DB-Zugriff implementieren.

Beides ist aber schnell erledigt und nicht sonderlich komplex. Irgendwo im Netz ein XML File ablegen, und mit mehreren Usern drarauf arbeiten, das ist aber... ja wie soll mans sagen, geziehlt selbst ins Knie geschossen kommt denke ich nahe ran.

Bearbeitet von streffin

Naja, sieh' es mal umgekehrt:

30MB XML-File als Datenbank missbrauchen - da ist "unterdimensioniert" geschmeichelt.

Und wie schon erwähnt: So komplex ist ein "fully blown webservice" -was auch immer Du darunter verstehen magst- nun auch wieder nicht.

Hallo? Ich meine der TE macht aktuell Zugriff auf ein file direkt auf der Platte.

dann verstehst du wohl unter "Auslagern" etwas anderes als wir

würde sie lokal auf der Platte liegen, dann könnte nur 1 Benutzer damit arbeiten

es sei denn, sie wurde im Netzwerk freigegeben, wodurch sie wieder für die anderen Benutzern nicht lokal auf der Platte liegt

man muss bei einer richtigen Datenbank (die von einem DBMS verwaltet wird) auch bedenken, dass diese grundsätzlich besser in der Speicherplatzverwaltung ist, als eine XML-Datei, da bei einer solchen ein Overhead durch tags und Attribute besteht (und wenn die Datei ordentlich formatiert ist auch durch die Einrückungen)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.