List.Buffer เก็บรายการข้อมูลไว้ในหน่วยความจำเพื่อเพิ่มประสิทธิภาพเมื่อต้องเข้าถึงรายการเดียวกันหลายครั้ง ฟังก์ชันนี้มีประโยชน์เมื่อต้องใช้ผลลัพธ์จากการคำนวณซ้ำๆ หรือเมื่อต้องการลดจำนวนการเข้าถึงแหล่งข้อมูลภายนอก
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| list | list | รายการที่ต้องการเก็บในหน่วยความจำ |
List.Buffer เก็บรายการข้อมูลไว้ในหน่วยความจำแบบ eager evaluation (ประมวลผลทั้งหมดตั้งแต่ต้น) แทนที่จะใช้ lazy evaluation ที่ประมวลผลเมื่อต้องการ เมื่อต้องใช้รายการเดียวกันหลายครั้ง ฟังก์ชันนี้จะประหยัดเวลาคำนวณได้มาก เพราะไม่ต้องคำนวณซ้ำ
ที่เจ๋งคือ List.Buffer คือเครื่องมือ trade-off ระหว่างหน่วยความจำและความเร็ว ใช้หน่วยความจำมากขึ้น แต่ลดการคำนวณซ้ำ ซึ่งมีประโยชน์โดยเฉพาะเมื่อรายการที่อ้างอิงจากแหล่งข้อมูลภายนอก (ไฟล์, API, ฐานข้อมูล) และต้องใช้หลายครั้ง
ส่วนตัวผม ผมมักใช้ List.Buffer กับ List.Select หรือ List.Transform ที่ซ้ำหลายครั้ง โดยเฉพาะเมื่อข้อมูลมาจากแหล่งที่ช้า ประหยัดกว่าเรียกแหล่งข้อมูลหลายรอบ 😎
เมื่อต้องใช้รายการเดียวกันหลายครั้ง ให้เก็บไว้ในหน่วยความจำ
แทนที่จะเข้าถึงแหล่งข้อมูลภายนอกซ้ำๆ ให้เก็บผลลัพธ์ในหน่วยความจำ
เก็บผลลัพธ์ของรายการเพื่อใช้ในการคำนวณหรือการกรองข้อมูลต่างๆ
สูตรนี้เก็บรายการตัวเลข {1, 2, 3, 4, 5} ไว้ในหน่วยความจำ เพื่อให้การเข้าถึงข้อมูลเร็วขึ้น
ผมใช้ let…in เพื่อชัดเจน กรองข้อมูล 1-1000 เหลือแค่ที่มากกว่า 500 แล้วเก็บในหน่วยความจำเพื่อใช้ซ้ำ ประหยัดการกรองซ้ำ
สูตรนี้สร้างรายการข้อความและเก็บไว้ในหน่วยความจำเพื่อใช้ซ้ำในการคำนวณต่างๆ
ผมแนะนำให้ใช้เมื่อ: 1) ต้องใช้รายการเดียวกันหลายครั้ง 2) แหล่งข้อมูลมาจากภายนอก (ช้า) 3) ต้องการประหยัด CPU มากกว่า หน่วยความจำ สำหรับรายการเล็กๆ จากหน่วยความจำแล้ว อาจไม่มีประโยชน์
ผมได้ใช้ทั้งคู่บ่อย List.Buffer ใช้กับรายการ (List) ส่วน Table.Buffer ใช้กับตาราง (Table) หลักการเดียวกัน คือประมวลผลทั้งหมดแล้วเก็บในหน่วยความจำ
ส่วนตัวผม มันขึ้นอยู่กับขนาดของรายการและชนิดข้อมูล รายการหนึ่งล้านแถว มี 10 คอลัมน์ อาจใช้หลาย MB สำหรับรายการตัวเลขง่ายๆ ใช้น้อยมาก ลองใช้เมื่อต้องประสิทธิภาพจริง
ฟังก์ชันที่ผู้เขียนโยงไว้กับ List.Buffer จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
List.Select จะรับ List และฟังก์ชันเงื่อนไข (selection as function) โดยจะประเมินฟังก์ชันเงื่อนไขกับสมาชิกแต่ละตัว หากฟังก์ชันคืนค่า true จะเก็บสมาชิกนั้นไว้ใน List ใหม่ หากคืนค่า false จะถูกคัดทิ้งไป
List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม
โหลดตารางเข้าสู่หน่วยความจำ (RAM) เพื่อแยกข้อมูลจากแหล่งเดิมและป้องกันไม่ให้ Query Folding ดึงข้อมูลใหม่
Table.Buffer บังคับโหลดตารางลงหน่วยความจำและแยกออกจากแหล่งข้อมูลต้นทาง ช่วยป้องกันการ fold และควบคุมเวลาประมวลผล
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่