比較儲存體選項
.NET Multi-platform App UI (MAUI) 提供多個儲存體選項,可根據資料的性質、結構和大小在本機裝置上快取資料。 在 .NET MAUI 應用程式中將資料儲存在本機的三個最常見選項如下:
- 喜好設定:將資料儲存在機碼值組
- 檔案系統:透過檔案系統存取,直接將鬆散的檔案儲存在裝置上
- 資料庫:在關聯式資料庫中儲存資料
在本單元中,我們會查看這些儲存體選項,以及每個選項最適合的情況。
使用喜好設定的時機
處理簡單的資料片段 (例如使用者選取項目) 時,[喜好設定] 就很方便。 此選項通常用來讓使用者設定應用程式。 您將此資料儲存為索引鍵/值組。 舉例來說,假設您想讓使用者指定應用程式,是否應在工作階段間儲存其使用者名稱和密碼。 您就可以將使用者的選擇儲存在喜好設定中。
下列程式碼示範如何將記錄在 saveLoginDetails
變數中的布林值儲存至名為 SaveLogin
的喜好設定,並且稍後再將此資料讀回。 請注意,如果找不到指定的喜好設定,Get
方法會要求您提供預設值:
bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);
Preferences
類別也包含判斷是否存在具名喜好設定 (ContainsKey
)、刪除喜好設定 (Remove
),以及移除所有喜好設定資料 (Clear
) 的方法。
注意
您應只將簡單的資料類型儲存為喜好設定。 您無法儲存清單、集合和陣列等大型物件的參考。 針對這類資料,請使用檔案系統或資料庫。
使用檔案系統的時機
行動和桌面裝置的檔案系統具有資料夾和檔案的階層式目錄結構。 當您有鬆散檔案 (例如 XML、二進位或文字檔) 時,使用檔案系統十分方便。 例如,假設您希望在本機裝置上儲存記錄資料。 您可以建立文字檔後將其儲存在檔案系統中,並在事件發生時寫入記錄。 您也可以將大型資料結構序列化到檔案中,如果需要在應用程式關閉時儲存,請在本機檔案系統上快取。 應用程式重新啟動時,您可以將此資料重新讀回記憶體。 在以下程式碼顯示的範例中,系統會將資料序列化到檔案後再行儲存,然後讀回資料,並在稍後將序列化還原至記憶體。 在這裡,我們會針對序列化格式使用 JSON,但您可以以您覺得最適合資料性質和應用程式安全性需求的任何格式來儲存資料。
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);
存取應用程式沙箱
當您處理 XML 檔案等鬆散的檔案時,必須將其儲存在檔案系統中的適當位置。 有些資料可能具有敏感性,您不想將它儲存到其他應用程式或使用者很可以輕鬆地存取的位置。 .NET MAUI 應用程式會提供應用程式沙箱。 「應用程式沙箱」是可供應用程式使用的私人區域。 根據預設,除了作業系統以外,其他任何應用程式都無法存取此區域。 您可以使用 FileSystem
類別的 AppDataDirectory
靜態屬性存取沙箱:
string path = FileSystem.AppDataDirectory;
在這行程式碼中,path
變數包含可讓您儲存檔案以供應用程式使用之位置的檔案路徑。 您可以使用「使用檔案系統的時機」中顯示的技巧,在此資料夾的檔案內讀取和寫入資料。
注意
FileSystem.AppDataDirectory
屬性是裝置特定路徑的抽象概念;它會評估 Android、iOS 和 WinUI3 上的不同資料夾。 這個抽象概念可讓您撰寫程式碼,以與沙箱執行所在的平台無關的方式參考沙箱。 使用此抽象概念,而不是在程式碼中明確參考裝置特定路徑。
在 iOS 應用程式中儲存資料的指導方針
針對檔案應儲存的位置,Apple iOS 有指導方針。 共有兩個主要的資料夾位置:
[程式庫] 資料夾:如先前所述,
FileSystem.AppDataDirectory
屬性會傳回此資料夾。 當您儲存應用程式產生的資料時,請使用 [Library] 資料夾。[文件] 資料夾:以下程式碼片段顯示如何在
docFolder
變數中參考此資料夾。 [Documents] 資料夾應僅用來儲存使用者產生的資料。 這是直接回應使用者動作所建立的資料。 例如,如果您要建立 Microsoft Word 等文字編輯應用程式,您會將文件儲存在 [文件] 資料夾中。string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
使用資料庫的時機
當您擁有資料之間的關聯性,或是希望隨著時間篩選資料時,使用本機資料庫是不錯的選擇。 舉例來說,在社交媒體案例中,每則貼文都包含與貼文相關的時間戳記和內容等資料。 不過,每則貼文也會與發文的使用者具有關聯性。 在資料庫中表示這種關聯性,以防止貼文之間的資料重複並提高搜尋資料效率,是合理的做法。
SQLite 資料庫是一個檔案,您必須將它儲存在適當的位置。 在理想情況下,您應該在沙箱中的 AppDataDirectory
資料夾底下建立資料夾,並在此資料夾中建立資料庫。