แก้ไขแล้ว - ฉันใช้การผสมผสานระหว่างการจัดการด้วยตนเอง (ข้ามตัวรวบรวมขยะ) และตัวเลือก NSData ที่แมป ปรากฎว่า iStat ไม่มีตัวเลขหน่วยความจำที่ถูกต้อง และเครื่องมือก็ระบุถึงพฤติกรรมที่คาดหวัง นอกจากนี้ การเรียก CC_MD5() และ CC_SHA1() ยังได้เรียกเข้าสู่ CC_MD5_Update() และ CC_SHA1_Update() อยู่แล้ว ดังนั้นจึงไม่ก่อให้เกิดปัญหาเช่นกัน
ขณะนี้ฉันกำลังทำงานกับแอปพลิเคชัน Cocoa ที่ต้องการแฮชไฟล์ขนาดใหญ่โดยใช้ SHA-1 และ MD5 ฉันใช้ CC_MD5 และ CC_SHA1 และอ่านไฟล์ไปยังวัตถุ NSData อย่างไรก็ตาม สิ่งนี้ใช้ RAM จำนวนมหาศาลและทำให้หน่วยความจำรั่วเหมือนตะแกรงด้วยเหตุผลบางประการ แม้ว่าจะไม่ได้อ้างอิงออบเจ็กต์ NSData ก็ตาม… ฉันสงสัยว่าเป็นคนเก็บขยะที่พยายามตามทัน
อะไรคือสิ่งที่ดีที่สุด (ง่ายที่สุดถ้าเป็นไปได้เช่นกัน แต่ฉันไม่รังเกียจที่จะทำงานพิเศษเพื่อเร่งความเร็ว) วิธีดำเนินการแฮช MD5 และ SHA-1 กับไฟล์ขนาดใหญ่เช่นนี้
ติดตามผล
ดังที่ได้กล่าวไว้ด้านล่าง การแมป NSData อาจช่วยได้ แต่ฉันคิดว่าฉันพบตัวเลือกอื่นแล้ว มันยังต้องปรับปรุงอีกบ้าง แต่ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาที่แข็งแกร่งกว่ามาก แนวคิดคือการใช้ NSFileHandle และอ่าน "ชิ้นข้อมูล" - ดังนั้นอาจสูงสุดครั้งละ 256MB จากนั้น (สำหรับตัวอย่าง MD5) ให้ใช้ CC_MD5() ตามด้วยชุดของ CC_MD5_Update() เพื่อคำนวณแฮชเป็นชิ้น ๆ เมื่อรวมกับการจัดการหน่วยความจำด้วยตนเองก็น่าจะช่วยได้