SQLite'i zaman uyumsuz olarak kullanma

Tamamlandı

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 yaptığınız her şey kullanıcı arabirimi iş parçacığında yürütülmüştür. 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şturur

  • DropTableAsync: Belirtilen sınıfla bağıntılı tabloyu bırakır

  • GetAsync: Tabloda belirtilen sınıfla bağıntılı olan ve oluşturucuya geçirilen birincil anahtarla eşleşen kaydı alır

  • InsertAsync: Oluşturucuya geçirilen öğeyi kullanarak yeni bir kayıt ekler

  • UpdateAsync: Oluşturucuya geçirilen öğeyi kullanarak var olan bir kaydı Güncelleştirmeler

  • DeleteAsync: Tabloda belirtilen sınıfa eşlenen kaydı siler ve oluşturucuya geçirilen birincil anahtarla eşleşir

  • QueryAsync: Doğrudan SQL sorgusu çalıştırır ve bir nesne döndürür

  • ExecuteAsync: Doğrudan bir SQL sorgusu çalıştırır ve etkilenen satır sayısını döndürür

  • ExecuteScalarAsync: Doğrudan SQL sorgusu çalıştırır ve tek sonucu döndürür

  • ToListAsync: 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.