Jämför lagringsalternativ

Slutförd

.NET Multi-Platform App UI (MAUI) innehåller flera lagringsalternativ för cachelagring av data lokalt på en enhet, beroende på datas natur, struktur och storlek. De tre vanligaste alternativen för att lagra data lokalt i en .NET MAUI-app är:

  • Inställningar: Lagrar data i nyckel/värde-par
  • Filsystem: Lagrar lösa filer direkt på enheten via filsystemåtkomst
  • Databas: Lagrar data i en relationsdatabas

Diagram över vanliga lokala lagringsalternativ som är tillgängliga för en .NET MAUI-app.

I den här lektionen tittar vi på de här lagringsalternativen och de situationer för vilka varje alternativ är lämpligast.

När du ska använda inställningar

Inställningar är praktiska när du arbetar med enkla datadelar, till exempel användarval. De används ofta för att tillåta användare att konfigurera programmet. Du lagrar dessa data som en uppsättning nyckel/värde-par. Anta till exempel att du vill att användaren ska kunna ange om appen ska spara sitt användarnamn och lösenord mellan sessionen. Du kan lagra användarens val i Inställningar.

Följande kod visar hur du lagrar ett booleskt värde som registrerats i variabeln saveLoginDetails till en inställning med namnet SaveLoginoch sedan läser tillbaka dessa data. Observera att Get metoden förväntar sig att du anger ett standardvärde om den angivna inställningen inte hittas:

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

Klassen Preferences innehåller också metoder för att avgöra om det finns en namngiven inställning (ContainsKey), ta bort en inställning (Remove) och ta bort alla inställningsdata (Clear).

Kommentar

Du bör bara lagra enkla datatyper som inställningar. Du kan inte lagra referenser till stora objekt som listor, samlingar och matriser. För den här typen av data använder du filsystemet eller en databas.

När filsystemet ska användas

Mobila och stationära enheter har ett filsystem med en hierarkisk katalogstruktur med mappar och filer. Det är praktiskt att använda filsystemet när du har lösa filer som XML- eller binärfiler eller textfiler. Anta till exempel att du vill lagra loggdata lokalt på enheten. Du kan skapa en textfil, spara den här filen i filsystemet och skriva loggar till den när händelser inträffar. Du kan också serialisera stora datastrukturer till en fil och cachelagra dem lokalt i filsystemet om du behöver spara när appen stängs av. När appen startas om kan du läsa dessa data igen till minnet. Följande kod visar exempel på serialisering av data till en fil och spara den här filen, och sedan läsa tillbaka data och deserialisera tillbaka dem till minnet senare. Här använder vi JSON för serialiseringsformatet, men du kan spara data i det format som du anser passar bäst för datatypen och appens säkerhetskrav.

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);

Åtkomst till appens sandbox-miljö

När du arbetar med lösa filer, till exempel XML-filer, måste du lagra dem på en lämplig plats i filsystemet. Vissa av dessa data kan vara känsliga och du vill inte spara dem på en plats där andra appar eller användare enkelt kan komma åt dem. .NET MAUI-appar tillhandahåller appens sandbox-miljö. Appens sandbox-miljö är ett privat område som programmet kan fungera med. Som standard kan inga andra program komma åt det här området förutom operativsystemet. Du kan komma åt sandbox-miljön med hjälp av klassens AppDataDirectoryFileSystem statiska egenskap:

string path = FileSystem.AppDataDirectory;

I den här koden innehåller variabeln path filsökvägen till den plats där du kan lagra filer som programmet ska använda. Du kan läsa och skriva data till filer i den här mappen med hjälp av de tekniker som visas i avsnittet När filsystemet ska användas.

Kommentar

Egenskapen är en abstraktion av en enhetsspecifik sökväg. Den FileSystem.AppDataDirectory utvärderas till olika mappar i Android, iOS och WinUI3. Med den här abstraktionen kan du skriva kod som refererar till sandbox-miljön på ett sätt som är oberoende av den plattform som den körs på. Använd den här abstraktionen i stället för att uttryckligen referera till en enhetsspecifik sökväg i koden.

Riktlinjer för att spara data i iOS-appar

Apple har iOS-riktlinjer för var filer ska lagras. Det finns två huvudsakliga mappplatser:

  • Mappen Bibliotek: Som tidigare beskrivits returnerar egenskapen den FileSystem.AppDataDirectory här mappen. Använd mappen Bibliotek när du lagrar appgenererade data.

  • Mappen Dokument: Följande kodfragment visar hur du refererar till den här mappen i variabelndocFolder. Använd mappen Dokument för att endast lagra användargenererade data. Dessa data skapas som ett direkt svar på en användaråtgärd. Om du till exempel skapade ett textredigeringsprogram som Microsoft Word skulle du lagra dokumentet i mappen Dokument.

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

När du ska använda en databas

Det är en bra idé att använda en lokal databas när du har relationer mellan data eller när du vill filtrera data över tid. Till exempel: I scenariot med sociala medier innehåller varje inlägg data om inlägget, till exempel tidsstämpeln och innehållet. Varje inlägg har dock också en relation till en användare som gjorde inlägget. Det är klokt att representera den här relationen i en databas för att förhindra dataduplicering mellan inlägg och även för att förbättra effektiviteten i att söka efter data.

En SQLite-databas är en fil och du måste lagra den på en lämplig plats. Vi rekommenderar att du skapar en mapp under AppDataDirectory mappen i sandbox-miljön och skapar databasen i den här mappen.

1.

Anta att du skapar ett .NET MAUI-program för iOS som gör det möjligt för användare att skapa musik. Du vill att användarna ska kunna spara sitt arbete i en fil så att de kan starta om programmet och fortsätta arbeta där de slutade. I sandbox-miljön för iOS-appen, till vilken mapp skulle du spara den här filen?

2.

Anta att du vill lagra en liten del data så att den är tillgänglig mellan programstarter. Vilket datalagringsalternativ är lämpligast?