SQLite'i zaman uyumsuz olarak kullanma
Veritabanında sorguları zaman uyumlu bir şekilde çalıştırırsanız, bu durum performans sorunlarına ve yanıt vermeyen uygulamalara yol açabilir. SQLite-net, uygulamanızın yanıt verme hızını korumak için kullanabileceğiniz zaman uyumsuz bir API'ye sahiptir.
Bu ünitede, uygulamanızın yüksek oranda yanıt vermeye devam etmesini sağlamak için SQLite-net zaman uyumsuz API'sini kullanmayı öğreneceksiniz.
Zaman uyumsuz sorguları anlama
Bu noktaya kadar tüm veritabanı işlemlerinizi kullanıcı arabirimi iş parçacığında yürüttünüzün. Ancak, son derece hızlı yanıt veren bir mobil uygulama oluşturmak için, işleri biraz farklı yapmak istersiniz. Ui iş parçacığında veritabanı işlemleri çalıştırırsanız, işlemin tamamlanması uzun sürerse kullanıcı arabiriminin donmasına neden olabilir.
Bu sorunu çözmek için SQLite-net, sınıfı aracılığıyla SQLiteAsyncConnection
zaman uyumsuz bir API içerir. Örneğin, zaman uyumsuz olarak bir tablo oluşturmak için yöntemini kullanabilirsiniz CreateTableAsync
:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
SQLite-net ile zaman uyumsuz işlemler gerçekleştirme
sınıfı, SQLiteAsyncConnection
benzer işlemleri zaman uyumlu karşılığı olarak kullanıma sunar. Ancak, tüm işlemler arka plan kullanımı için görev tabanlıdır.
Yaygın olarak kullanılan zaman uyumsuz işlemler şunlardır:
CreateTableAsync
: Belirtilen sınıfı temel alan bir tablo oluştururDropTableAsync
: Belirtilen sınıfla bağıntılı tabloyu bırakırGetAsync
: Tabloda belirtilen sınıfla bağıntılı olan ve oluşturucuya geçirilen birincil anahtarla eşleşen kaydı alırInsertAsync
: Oluşturucuya geçirilen öğeyi kullanarak yeni bir kayıt eklerUpdateAsync
: Oluşturucuya geçirilen öğeyi kullanarak var olan bir kaydı güncelleştirirDeleteAsync
: Tabloda belirtilen sınıfla eşlenen kaydı siler ve oluşturucuya geçirilen birincil anahtarla eşleşirQueryAsync
: Doğrudan SQL sorgusu çalıştırır ve bir nesne döndürürExecuteAsync
: Doğrudan bir SQL sorgusu çalıştırır ve etkilenen satır sayısını döndürürExecuteScalarAsync
: Doğrudan SQL sorgusu çalıştırır ve tek sonucu döndürürToListAsync
: Tablo yöntemini zaman uyumsuz olarak yürütür
Aşağıdaki kodda, kayıtları zaman uyumsuz olarak almak için yönteminin nasıl kullanılacağına ToListAsync
ilişkin bir örnek gösterilmektedir:
SQLiteAsyncConnection conn;
ObservableCollection<User> userList; // Bound to UI
...
public async Task AddAllUsersAsync()
{
List<User> users = await conn.Table<User>().ToListAsync();
// Must be on UI thread here!
foreach (var u in users)
userList.Add(u);
}
Bu örnekte yöntemi, ToListAsync
veritabanındaki tüm kullanıcıları zaman uyumsuz olarak getirir. Bu yöntemi kullanırsanız, veritabanında çok sayıda kullanıcı olsa bile kullanıcı arabiriminiz yanıt vermeye devam eder.