Asynchronicznie używaj narzędzia SQLite
Jeśli uruchamiasz zapytania w bazie danych w sposób synchroniczny, może to prowadzić do problemów z wydajnością i nie odpowiadania aplikacji. SqLite-net ma asynchroniczny interfejs API, którego można użyć do zapewnienia dynamicznego reagowania aplikacji.
W tej lekcji dowiesz się, jak korzystać z asynchronicznego interfejsu API SQLite-net w celu zapewnienia, że aplikacja pozostaje bardzo elastyczna.
Omówienie zapytań asynchronicznych
Do tego momentu wykonano wszystkie operacje bazy danych w wątku interfejsu użytkownika. Jednak aby utworzyć bardzo elastyczną aplikację mobilną, chcesz zrobić coś nieco inaczej. Jeśli uruchamiasz operacje bazy danych w wątku interfejsu użytkownika, może to spowodować zablokowanie interfejsu użytkownika, jeśli operacja trwa długo.
Aby rozwiązać ten problem, sqLite-net zawiera asynchroniczny interfejs API za pośrednictwem SQLiteAsyncConnection
klasy . Aby na przykład utworzyć tabelę asynchronicznie, można użyć CreateTableAsync
metody :
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Wykonywanie operacji asynchronicznych za pomocą narzędzia SQLite-net
Klasa SQLiteAsyncConnection
uwidacznia podobne operacje jako synchroniczny odpowiednik. Jednak operacje są oparte na zadaniach na potrzeby użycia w tle.
Typowe dostępne operacje asynchroniczne obejmują:
CreateTableAsync
: Tworzy tabelę na podstawie wskazanej klasyDropTableAsync
: Usuwa tabelę, która jest skorelowana ze wskazaną klasąGetAsync
: Pobiera rekord w tabeli, który jest skorelowany z wskazaną klasą i pasuje do klucza podstawowego przekazanego do konstruktoraInsertAsync
: Wstawia nowy rekord przy użyciu elementu przekazanego do konstruktoraUpdateAsync
: aktualizuje istniejący rekord przy użyciu elementu przekazanego do konstruktoraDeleteAsync
: Usuwa rekord w tabeli, który jest mapowany na wskazaną klasę i pasuje do klucza podstawowego przekazanego do konstruktoraQueryAsync
: Uruchamia bezpośrednie zapytanie SQL i zwraca obiektExecuteAsync
: Uruchamia bezpośrednie zapytanie SQL i zwraca liczbę wierszy, których dotyczy problemExecuteScalarAsync
: uruchamia bezpośrednie zapytanie SQL i zwraca pojedynczy wynikToListAsync
: wykonuje metodę Table asynchronicznie
Poniższy kod przedstawia przykład użycia ToListAsync
metody do asynchronicznego pobierania rekordów:
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);
}
W tym przykładzie ToListAsync
metoda pobiera wszystkich użytkowników z bazy danych asynchronicznie. Jeśli używasz tej metody, interfejs użytkownika pozostaje dynamiczny, nawet jeśli w bazie danych znajduje się duży zestaw użytkowników.