Jämför lagringsalternativ
.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
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 SaveLogin
och 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 AppDataDirectory
FileSystem
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 variabeln
docFolder
. 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.