SQLite asynchroon gebruiken
Als u query's uitvoert op een database op een synchrone manier, kan dit leiden tot prestatieproblemen en niet-reagerende apps. SQLite-net heeft een asynchrone API die u kunt gebruiken om uw toepassing responsief te houden.
In deze les leert u hoe u de SQLite-net asynchrone API gebruikt om ervoor te zorgen dat uw toepassing zeer responsief blijft.
Asynchrone query's begrijpen
Tot nu toe hebt u al uw databasebewerkingen uitgevoerd op de UI-thread. Als u echter een zeer responsieve mobiele toepassing wilt bouwen, wilt u iets anders doen. Als u databasebewerkingen uitvoert op de UI-thread, kan dit ertoe leiden dat de gebruikersinterface wordt geblokkeerd als het lang duurt voordat de bewerking is voltooid.
Om dit probleem op te lossen, bevat SQLite-net een asynchrone API via de SQLiteAsyncConnection
klasse. Als u bijvoorbeeld asynchroon een tabel wilt maken, kunt u de CreateTableAsync
methode gebruiken:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Asynchrone bewerkingen uitvoeren met SQLite-net
De SQLiteAsyncConnection
klasse toont vergelijkbare bewerkingen als de synchrone tegenhanger. De bewerkingen zijn echter allemaal gebaseerd op taken voor achtergrondgebruik.
De algemene beschikbare asynchrone bewerkingen zijn onder andere:
CreateTableAsync
: Hiermee maakt u een tabel op basis van de aangegeven klasseDropTableAsync
: Hiermee wordt de tabel verwijderd die overeenkomt met de aangegeven klasseGetAsync
: Haalt de record op in de tabel die overeenkomt met de aangegeven klasse en komt overeen met de primaire sleutel die is doorgegeven aan de constructorInsertAsync
: Hiermee wordt een nieuwe record ingevoegd met behulp van het item dat is doorgegeven aan de constructorUpdateAsync
: Hiermee wordt een bestaande record bijgewerkt met behulp van het item dat is doorgegeven aan de constructorDeleteAsync
: Verwijdert de record in de tabel die is toegewezen aan de aangegeven klasse en komt overeen met de primaire sleutel die is doorgegeven aan de constructorQueryAsync
: Voert een directe SQL-query uit en retourneert een objectExecuteAsync
: Voert een directe SQL-query uit en retourneert het aantal betrokken rijenExecuteScalarAsync
: Voert een directe SQL-query uit en retourneert het enkelvoudige resultaatToListAsync
: voert de tabelmethode asynchroon uit
In de volgende code ziet u een voorbeeld van hoe u de ToListAsync
methode gebruikt om records asynchroon op te halen:
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);
}
In dit voorbeeld haalt de ToListAsync
methode alle gebruikers asynchroon op uit de database. Als u deze methode gebruikt, blijft uw gebruikersinterface responsief, zelfs als er een grote set gebruikers in de database is.