簡體   English   中英

我是否必須處理 Realm 實例?

[英]Do I have to dispose Realm instances?

我有一個以 Realm 作為數據庫的 Xamarin Forms 應用程序。

應用程序在啟動時正在下載數據。 我將它與現有數據進行比較,如果存在特定對象,我會更新它。 如果沒有,那么我添加它。 如果數據庫中有一些對象沒有被下載,我會刪除它們。 當用戶瀏覽應用程序時,我會重復這個過程幾次。 如果可能的話,只是為了讓一切保持最新。

我訂閱了ShouldCompactOnLaunch事件,我觀察到每次啟動應用程序數據庫時都會使用越來越多的內存,盡管下載的數據沒有任何變化。 我想知道發生了什么? 我是否必須手動處理每個實例? 在官方文檔中,我發現了一個聲明:

The Realm class implements IDisposable in order to take care of native memory deallocation and file descriptors so instances will be closed automatically when variables go out of scope.

https://realm.io/docs/dotnet/latest/#closure-realm-instances

處理每個領域對我來說有點棘手,因為我已經將訪問領域放在我的 DataStoreService 中並且我正在訪問來自不同線程的數據(每次在我的 dataStore 中調用 Realm.GetInstance() )。 但是,如果手動處理是強制性的,那么我將嘗試重構我的代碼。 如果不是,那么我想知道為什么每次啟動應用程序時,realm 都會消耗越來越多的磁盤空間。

要直接回答您的問題,是的,您應該處理Realm實例,尤其是在后台線程上。

這是因為一個 Realm 數據庫在內部運行在一個 Realm 的多個版本上,並且最舊和最新版本之間的差異越大,它占用的空間就越多。

UI 線程上的 Realms 將自動刷新以更新到最新版本,而后台線程上的 Realms 不會發生這種情況,因此它們會被固定到舊版本,直到它們被關閉。 因此,您應該在處理完 Realm 實例后立即在后台線程上手動處理它們。

不幸的是,Realm 的 .NET 文檔並未提供所有這些細節,但您可以在此處此處查看 Android 文檔,因為它的工作方式類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM