ใช้ SQLite แบบอะซิงโครนัส

เสร็จสมบูรณ์เมื่อ

ถ้าคุณเรียกใช้คิวรีบนฐานข้อมูลแบบซิงโครนัสอาจทําให้เกิดปัญหาด้านประสิทธิภาพการทํางานและแอปที่ไม่ตอบสนอง SQLite-net มี API แบบอะซิงโครนัสที่คุณสามารถใช้เพื่อให้แอปพลิเคชันของคุณตอบสนองได้

ในหน่วยนี้ คุณจะได้เรียนรู้วิธีการใช้ API แบบอะซิงโครนัส SQLite-net เพื่อให้แน่ใจว่าแอปพลิเคชันของคุณยังคงตอบสนองสูง

ทําความเข้าใจคิวรีแบบอะซิงโครนัส

จนถึงจุดนี้ คุณดําเนินการฐานข้อมูลทั้งหมดของคุณบนเธรด UI อย่างไรก็ตามหากต้องการสร้างแอปพลิเคชันมือถือที่ตอบสนองสูงคุณต้องทําสิ่งต่าง ๆ แตกต่างกันเล็กน้อย ถ้าคุณเรียกใช้การดําเนินการฐานข้อมูลบนเธรด UI อาจทําให้ UI หยุดการทํางานถ้าการดําเนินการใช้เวลานาน

เมื่อต้องการแก้ไขปัญหานี้ SQLite-net มี API แบบอะซิงโครนัสผ่านคลาส SQLiteAsyncConnection ตัวอย่างเช่น หากต้องการสร้างตารางแบบอะซิงโครนัส คุณสามารถใช้วิธี CreateTableAsync ได้:

var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();

ดําเนินการอะซินซินด้วย SQLite-net

คลาส SQLiteAsyncConnection แสดงการทํางานที่คล้ายกันเป็นคู่แบบซิงโครนัส อย่างไรก็ตาม การดําเนินการจะยึดตามงานทั้งหมดสําหรับการใช้งานเบื้องหลัง

การดําเนินการแบบอะซิงโครนัสที่พร้อมใช้งานโดยทั่วไปประกอบด้วย:

  • CreateTableAsync: สร้างตารางตามคลาสที่ระบุ

  • DropTableAsync: ทิ้งตารางที่มีความสัมพันธ์กับคลาสที่ระบุ

  • GetAsync: รับเรกคอร์ดในตารางที่เชื่อมโยงกับคลาสที่ระบุ และจับคู่คีย์หลักที่ส่งผ่านไปยังคอนสตรักเตอร์

  • InsertAsync: แทรกระเบียนใหม่โดยใช้รายการที่ส่งผ่านไปยังคอนสตรักเตอร์

  • UpdateAsync: อัปเดตระเบียนที่มีอยู่โดยใช้รายการที่ส่งผ่านไปยังคอนสตรักเตอร์

  • DeleteAsync: ลบเรกคอร์ดในตารางที่แมปกับคลาสที่ระบุ และจับคู่คีย์หลักที่ส่งผ่านไปยังคอนสตรักเตอร์

  • QueryAsync: เรียกใช้คิวรี SQL โดยตรงและส่งกลับออบเจ็กต์

  • ExecuteAsync: เรียกใช้คิวรี SQL โดยตรงและส่งกลับจํานวนแถวที่ได้รับผลกระทบ

  • ExecuteScalarAsync: เรียกใช้คิวรี SQL โดยตรงและส่งกลับผลลัพธ์เดียว

  • ToListAsync: ดําเนินการวิธีการ ตาราง แบบอะซิงโครนัส

โค้ดต่อไปนี้แสดงตัวอย่างของวิธีการใช้เมธอด ToListAsync เพื่อดึงข้อมูลเรกคอร์ดแบบอะซิงโครนัส:

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);
}

ในตัวอย่างนี้ เมธอด ToListAsync ดึงข้อมูลผู้ใช้ทั้งหมดจากฐานข้อมูลแบบอะซิงโครนัส หากคุณใช้วิธีนี้ UI ของคุณจะยังคงตอบสนองแม้ว่าจะมีผู้ใช้จํานวนมากในฐานข้อมูลก็ตาม