Ich habe ein gemeinsames Projekt, wo ich die Datenbank in Realm anstelle von SQLite geändert habe.Xamarin Realm - wann zu schließen Realm
Mein Problem ist, wenn das Realm in meinem DatabaseManager geschlossen wird, wird das Ergebnis entfernt. Daher habe ich eine statische Singleton-Instanz des Realms erstellt, die alle meine DatabaseManager verwenden. Jetzt stürzt meine App nach kurzer Zeit im Speicher ab, und wenn ich alle meine Datenbank-Funktionen entferne, funktioniert es.
Ich eröffne mein Realm-Instanz hier:
public class RealmDatabase
{
private Realm mRealmDB;
public Realm RealmDB
{
get
{
if (mRealmDB == null || mRealmDB.IsClosed)
{
SetRealm();
}
return mRealmDB;
}
}
static RealmDatabase cCurrentInstance;
public static RealmDatabase Current
{
get
{
if (cCurrentInstance == null)
cCurrentInstance = new RealmDatabase();
return cCurrentInstance;
}
}
public RealmDatabase()
{
}
private void SetRealm()
{
var config = new RealmConfiguration ("DBName.realm", true);
mRealmDB = Realm.GetInstance (config);
}
public Transaction BeginTransaction()
{
return RealmDB.BeginWrite();
}
}
Die Ich habe meine DatabaseManagler wie folgt aussehen:
public class NewFreeUserManager
{
internal Realm RealmDB = RealmDatabase.Current.RealmDB;
static NewFreeUserManager cCurrentInstance;
public static NewFreeUserManager Current
{
get
{
if (cCurrentInstance == null)
cCurrentInstance = new NewFreeUserManager();
return cCurrentInstance;
}
}
private NewFreeUserManager()
{
}
internal bool Save (FreeUser freeuser)
{
try
{
using (var trans = RealmDB.BeginWrite())
{
RealmDB.RemoveAll<FreeUser>();
var fu = RealmDB.CreateObject<FreeUser>();
fu = freeuser;
trans.Commit();
}
return true;
}
catch (Exception e)
{
Console.WriteLine ("FreeUser save: " + e.ToString());
return false;
}
}
internal FreeUser Get()
{
return RealmDB.All<FreeUser>().FirstOrDefault();
}
}
Kann mir jemand helfen?