ข้อแตกต่างระหว่างDirectory.EnumerateFiles
vs GetFiles
คืออะไร?
เห็นได้ชัดว่าหนึ่งส่งกลับอาร์เรย์และผลตอบแทนอื่น ๆ นับได้
มีอะไรอีกไหม
ข้อแตกต่างระหว่างDirectory.EnumerateFiles
vs GetFiles
คืออะไร?
เห็นได้ชัดว่าหนึ่งส่งกลับอาร์เรย์และผลตอบแทนอื่น ๆ นับได้
มีอะไรอีกไหม
คำตอบ:
จากเอกสาร :
กระบวนการ EnumerateFiles และ GetFiles แตกต่างกันดังนี้: เมื่อคุณใช้ EnumerateFiles คุณสามารถเริ่มระบุคอลเลกชันของชื่อก่อนที่จะส่งกลับคอลเลกชันทั้งหมด เมื่อคุณใช้ GetFiles คุณต้องรอให้ชื่อทั้งหมดกลับคืนมาก่อนจึงจะสามารถเข้าถึงอาร์เรย์ได้ ดังนั้นเมื่อคุณทำงานกับไฟล์และไดเรกทอรีจำนวนมาก EnumerateFiles จะมีประสิทธิภาพมากกว่า
ดังนั้นโดยทั่วไปแล้วEnumerateFiles
คืนค่าIEnumerable
ที่สามารถประเมินค่อนข้างขี้เกียจในขณะที่GetFiles
ผลตอบแทนที่จะstring[]
ต้องมีประชากรอย่างเต็มที่ก่อนที่จะสามารถกลับมา
FileSystemEnumerableFactory.CreateFileInfoIterator()
ผมมองเข้าไปในแหล่งที่มาและพบว่าทั้งสองวิธีใช้ภายใน แต่EnumerateFiles()
ผลตอบแทนที่ได้ iterator นี้โดยตรงในขณะที่GetFiles()
สร้างเสริมจากมันและโทรList
ToArray()
ดังนั้นถ้าคุณสนใจความเร็วมันสมเหตุสมผลที่จะใช้EnumerateFiles()
และจัดการกับ iterator ด้วยตัวคุณเอง
EnumerateFiles
ผลตอบแทนIEnumerable<string>
และที่หมายถึงการดำเนินการรอการตัดบัญชี มันมีเฉพาะใน Fx4 ขึ้นไป
เมื่อใช้ EnumerateFiles .Last
ความเร็วทั้งหมดจะหายไปถ้าคุณกำลังใช้แล้ว วิธีนี้เหมาะสมสำหรับการไปยังไฟล์สุดท้ายเพราะจะต้องระบุไฟล์ทั้งหมดแล้วจึงเลือกไฟล์สุดท้าย
อย่างไรก็ตามการใช้.First
หรือ.FirstOrDefault
กลายเป็นอย่างรวดเร็วเพราะมันคว้ารายการแรกและย้ายไป
Array
vs Enumerable
คำตอบของคุณเป็นเรื่องทั่วไปสำหรับทุกสถานการณ์ดังกล่าว แต่ไม่ตอบคำถามที่ถาม