ข้อแตกต่างระหว่างDirectory.EnumerateFilesvs GetFilesคืออะไร?
เห็นได้ชัดว่าหนึ่งส่งกลับอาร์เรย์และผลตอบแทนอื่น ๆ นับได้
มีอะไรอีกไหม
ข้อแตกต่างระหว่างDirectory.EnumerateFilesvs 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กลายเป็นอย่างรวดเร็วเพราะมันคว้ารายการแรกและย้ายไป
Arrayvs Enumerableคำตอบของคุณเป็นเรื่องทั่วไปสำหรับทุกสถานการณ์ดังกล่าว แต่ไม่ตอบคำถามที่ถาม