Använda SQLite asynkront
Om du kör frågor på en databas på ett synkront sätt kan det leda till prestandaproblem och appar som inte svarar. SQLite-net har ett asynkront API som du kan använda för att hålla ditt program responsivt.
I den här lektionen får du lära dig hur du använder Asynkront API för SQLite-net för att säkerställa att ditt program förblir mycket dynamiskt.
Förstå asynkrona frågor
Fram tills nu har du kört alla dina databasåtgärder i användargränssnittstråden. Men för att skapa ett mycket dynamiskt mobilprogram vill du göra saker lite annorlunda. Om du kör databasåtgärder i användargränssnittstråden kan det leda till att användargränssnittet fryser om åtgärden tar lång tid att slutföra.
För att lösa det här problemet innehåller SQLite-net ett asynkront API via SQLiteAsyncConnection
klassen. Om du till exempel vill skapa en tabell asynkront kan du använda CreateTableAsync
metoden:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Utföra asynkrona åtgärder med SQLite-net
Klassen SQLiteAsyncConnection
exponerar liknande åtgärder som dess synkrona motsvarighet. Åtgärderna är dock alla aktivitetsbaserade för bakgrundsanvändning.
De vanliga tillgängliga asynkrona åtgärderna är:
CreateTableAsync
: Skapar en tabell baserat på den angivna klassenDropTableAsync
: Släpper tabellen som korrelerar med den angivna klassenGetAsync
: Hämtar posten i tabellen som korrelerar med den angivna klassen och matchar den primära nyckeln som skickas till konstruktornInsertAsync
: Infogar en ny post med hjälp av objektet som skickas till konstruktornUpdateAsync
: Uppdaterar en befintlig post med hjälp av objektet som skickas till konstruktornDeleteAsync
: Tar bort posten i tabellen som mappar till den angivna klassen och matchar den primära nyckeln som skickas till konstruktornQueryAsync
: Kör en direkt SQL-fråga och returnerar ett objektExecuteAsync
: Kör en direkt SQL-fråga och returnerar antalet berörda raderExecuteScalarAsync
: Kör en direkt SQL-fråga och returnerar det enskilda resultatetToListAsync
: Kör tabellmetoden asynkront
Följande kod visar ett exempel på hur du använder ToListAsync
metoden för att hämta poster asynkront:
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);
}
I det här exemplet ToListAsync
hämtar metoden alla användare från databasen asynkront. Om du använder den här metoden förblir användargränssnittet dynamiskt även om det finns en stor uppsättning användare i databasen.