Vergleichen von Speicheroptionen

Abgeschlossen

.NET MAUI bietet je nach Art, Struktur und Größe der Daten mehrere Speicheroptionen zum lokalen Zwischenspeichern von Daten auf einem Gerät. Die drei gängigsten Optionen zum lokalen Speichern von Daten in einer .NET MAUI-App sind:

  • Einstellungen: Speichert Daten in Schlüssel-Wert-Paaren.
  • Dateisystem: Speichert unverbundene Dateien per Dateisystemzugriff direkt auf dem Gerät
  • Datenbank: Speichert Daten in einer relationalen Datenbank.

Diagram of the common local storage options available to a .NET MAUI app.

In dieser Lerneinheit werden die oben genannten Speicheroptionen sowie die Situationen betrachtet, für die sie jeweils am besten geeignet sind.

Verwenden von Einstellungen

Einstellungen sind praktisch, wenn Sie mit einfachen Daten arbeiten – etwa mit Benutzeroptionen. Sie werden häufig verwendet, um Benutzern das Konfigurieren der Anwendung zu ermöglichen. Diese Daten werden als Schlüssel-Wert-Paare gespeichert. Angenommen, Sie möchten, dass der Benutzer angeben kann, ob die App den Benutzernamen und das Kennwort zwischen Sitzungen speichern soll. Die Auswahl des Benutzers kann in Einstellungen gespeichert werden.

Der folgende Code zeigt, wie Sie einen booleschen Wert, der in der Variablen saveLoginDetails erfasst wurde, in einer Einstellung namens SaveLogin speichern und die Daten später wieder auslesen. Beachten Sie, dass von der Get-Methode die Angabe eines Standardwerts erwartet wird, wenn die angegebene Einstellung nicht gefunden wird:

bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);

Die Klasse Preferences enthält auch Methoden zum Bestimmen, ob eine benannte Einstellung vorhanden ist (ContainsKey), zum Löschen einer Einstellung (Remove) und zum Entfernen aller Einstellungsdaten (Clear).

Hinweis

Als Einstellungen sollten nur einfache Datentypen gespeichert werden. Verweise auf große Objekte wie Listen, Sammlungen und Arrays können nicht gespeichert werden. Verwenden Sie für diese Datentypen das Dateisystem oder eine Datenbank.

Verwenden des Dateisystems

Mobile Geräte und Desktopgeräte verfügen über ein Dateisystem mit einer hierarchischen Verzeichnisstruktur aus Ordnern und Dateien. Das Dateisystem eignet sich sehr gut für unverbundene Dateien wie XML-, Binär- oder Textdateien. Angenommen, Sie möchten Protokolldaten lokal auf dem Gerät speichern. Sie können eine Textdatei erstellen, die Datei im Dateisystem speichern und Protokolle in diese Datei schreiben, wenn Ereignisse auftreten. Sie können auch große Datenstrukturen in einer Datei serialisieren und lokal im Dateisystem zwischenspeichern, wenn Sie beim Herunterfahren der App Daten speichern müssen. Beim nächsten Start der App können die Daten dann wieder in den Arbeitsspeicher gelesen werden. Der folgende Code enthält Beispiele für das Serialisieren von Daten in einer Datei und das Speichern dieser Datei sowie für das spätere Auslesen und Deserialisieren der Daten in den Arbeitsspeicher. Hier wird JSON als Serialisierungsformat verwendet. Sie können die Daten jedoch in dem Format speichern, das Ihrer Meinung nach für die Art der Daten und die Sicherheitsanforderungen der App am besten geeignet ist.

using System.Text.Json;
using System.IO;

// Data to be written to the file system, and read back later
List<Customer> customers = ...;

// Serialize and save
string fileName = ...;
var serializedData = JsonSerializer.Serialize(customers);
File.WriteAllText(fileName, serializedData);
...

// Read and deserialize
var rawData = File.ReadAllText(fileName);
customers = JsonSerializer.Deserialize<List<Customer>>(rawData);

Zugreifen auf die App-Sandbox

Unverbundene Dateien wie etwa XML-Dateien müssen an einem geeigneten Speicherort im Dateisystem gespeichert werden. Einige dieser Daten sind möglicherweise vertraulich und dürfen nicht an einem Speicherort gespeichert werden, an dem andere Apps oder Benutzer problemlos auf sie zugreifen können. .NET MAUI-Apps bieten die App-Sandbox. Eine App-Sandbox ist ein privater Bereich, mit dem Ihre Anwendung arbeiten kann. Standardmäßig können außer dem Betriebssystem keine Anwendungen auf diesen Bereich zugreifen. Sie können mithilfe der statischen Eigenschaft AppDataDirectory der Klasse FileSystem auf die Sandbox zugreifen:

string path = FileSystem.AppDataDirectory;

In diesem Code enthält die Variable path den Dateipfad zu dem Speicherort, an dem Sie Dateien speichern können, die der Anwendung zur Verfügung stehen sollen. Mithilfe der im Abschnitt Verwenden des Dateisystems gezeigten Techniken können Sie Daten aus Dateien in diesem Ordner lesen oder Daten in Dateien in diesem Ordner schreiben.

Hinweis

Die Eigenschaft FileSystem.AppDataDirectory ist eine Abstraktion eines gerätespezifischen Pfads, und ihre Auswertung ergibt unter Android, iOS und WinUI3 jeweils unterschiedliche Ordner. Dank dieser Abstraktion kann im Code so auf die Sandbox verwiesen werden, dass der Verweis unabhängig von der ausführenden Plattform funktioniert. Verwenden Sie diese Abstraktion, anstatt in Ihrem Code explizit auf einen gerätespezifischen Pfad zu verweisen.

Richtlinien für das Speichern von Daten in iOS-Apps

Apple hat Richtlinien für die Speicherorte von Dateien unter iOS eingerichtet. Es gibt zwei Hauptspeicherorte:

  • Der Bibliothek-Ordner: Dieser Ordner wird wie zuvor beschrieben von der Eigenschaft FileSystem.AppDataDirectory zurückgegeben. Verwenden Sie den Ordner Bibliothek, wenn Sie Daten speichern, die von Apps generiert werden.

  • Der Dokumente-Ordner: Der folgende Codeausschnitt zeigt, wie Sie auf diesen Ordner in der Variablen docFolder verweisen. Verwenden Sie den Ordner Dokumente nur zum Speichern benutzergenerierter Daten. Diese Daten werden als direkte Reaktion auf eine Benutzeraktion erstellt. Wenn Sie z.B. eine Anwendung für die Textbearbeitung wie Microsoft Word erstellen, speichern Sie die Dokumente im Ordner Dokumente.

    string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    

Verwenden einer Datenbank

Eine lokale Datenbank eignet sich dann sehr gut, wenn Beziehungen zwischen Daten bestehen oder Sie die Daten im Lauf der Zeit filtern möchten. Beispiel: Im Social-Media-Szenario enthält jeder Beitrag individuelle Daten, z. B. den Zeitstempel und den Inhalt. Jeder Beitrag besitzt aber auch eine Beziehung zu einem Benutzer, der den Beitrag erstellt hat. Es ist sinnvoll, diese Beziehung in einer Datenbank darzustellen, um eine Datenduplizierung zwischen Beiträgen zu verhindern und die Effizienz beim Suchen nach Daten zu verbessern.

Eine SQLite-Datenbank ist eine Datei, die an einem geeigneten Ort gespeichert werden muss. Im Idealfall sollten Sie einen Ordner unter dem Ordner AppDataDirectory in der Sandbox und die Datenbank dann in diesem Ordner erstellen.

1.

Angenommen, Sie erstellen eine .NET MAUI-Anwendung für iOS, mit der Benutzer Musik erstellen können. Sie möchten es Benutzern ermöglichen, ihre Arbeit in einer Datei zu speichern, sodass sie die Anwendung neu starten und dort weitermachen können, wo sie aufgehört haben. In welchem Ordner der iOS-App-Sandbox würden Sie diese Datei speichern?

2.

Angenommen, Sie möchten eine kleine Datenmenge speichern, um beim nächsten Start einer Anwendung darauf zugreifen zu können. Welche Datenspeicheroption eignet sich am besten?