ใช้ 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 ของคุณจะยังคงตอบสนองแม้ว่าจะมีผู้ใช้จํานวนมากในฐานข้อมูลก็ตาม