คำตอบสั้น ๆ สำหรับคำถามนี้คือไม่มีค่าเหล่านี้เป็นตัวบ่งชี้ที่เชื่อถือได้ว่ามีการใช้งานหน่วยความจำเท่าไรและไม่เหมาะสมสำหรับการดีบักการรั่วไหลของหน่วยความจำ
ไบต์ส่วนตัวหมายถึงปริมาณของหน่วยความจำที่ปฏิบัติการกระบวนการได้ถาม - ไม่จำเป็นต้องมีจำนวนเงินที่มันเป็นจริงโดยใช้ พวกเขาเป็น "ส่วนตัว" เพราะพวกเขา (ปกติ) ไม่รวมไฟล์ที่แมปหน่วยความจำ (เช่น DLLs ที่ใช้ร่วมกัน) แต่ - ที่นี่จับ - พวกเขาไม่จำเป็นต้องยกเว้นหน่วยความจำที่จัดสรรโดยไฟล์เหล่านั้น ไม่มีวิธีที่จะบอกได้ว่าการเปลี่ยนแปลงในไบต์ส่วนตัวเกิดจากการปฏิบัติการเองหรือเนื่องจากห้องสมุดที่เชื่อมโยง ไบต์ส่วนตัวไม่เพียง แต่หน่วยความจำกายภาพเท่านั้น สามารถเพจได้กับดิสก์หรือในรายการหน้าสแตนด์บาย (กล่าวคือไม่ได้ใช้งานอีกต่อไป แต่ยังไม่มีการทำเพจเพจ)
Working Setหมายถึงหน่วยความจำกายภาพทั้งหมด(RAM) ที่ใช้โดยกระบวนการ อย่างไรก็ตามไม่เหมือนกับไบต์ส่วนตัวซึ่งรวมถึงไฟล์ที่แม็พหน่วยความจำและแหล่งข้อมูลอื่น ๆ ดังนั้นจึงเป็นการวัดที่แม่นยำน้อยกว่าไบต์ส่วนตัว นี่เป็นค่าเดียวกับที่ได้รับรายงานใน "การใช้งาน Mem" ของ Task Manager และเป็นที่มาของความสับสนไม่รู้จบในไม่กี่ปีที่ผ่านมา หน่วยความจำในชุดการทำงานคือ "กายภาพ" ในแง่ที่ว่าสามารถแก้ไขได้โดยไม่มีข้อผิดพลาดของหน้า อย่างไรก็ตามรายการหน้าสแตนด์บายยังคงอยู่ในหน่วยความจำ แต่ไม่ได้รายงานในชุดการทำงานและนี่คือสาเหตุที่คุณอาจเห็น "การใช้ Mem" ลดลงอย่างกระทันหันเมื่อคุณย่อแอปพลิเคชันให้เล็กที่สุด
ไบต์เสมือนเป็นพื้นที่ที่อยู่เสมือนทั้งหมดที่ครอบครองโดยกระบวนการทั้งหมด นี่เป็นเหมือนชุดการทำงานในแง่ที่ว่ามันรวมถึงไฟล์ที่แมปหน่วยความจำ (DLLs ที่ใช้ร่วมกัน) แต่ก็รวมถึงข้อมูลในรายการสแตนด์บายและข้อมูลที่ถูกเพจเอาต์แล้วและกำลังนั่งอยู่ในเพจไฟล์บนดิสก์ ไบต์เสมือนทั้งหมดที่ใช้โดยทุกกระบวนการในระบบภายใต้การโหลดจำนวนมากจะเพิ่มหน่วยความจำได้มากกว่าเครื่องจริง
ดังนั้นความสัมพันธ์คือ:
- ไบต์ส่วนตัวคือสิ่งที่แอปของคุณจัดสรรจริง แต่รวมถึงการใช้ไฟล์เพจ
- Working Set เป็น Private Bytes ที่ไม่มีการทำเพจรวมทั้งไฟล์ที่แม็พหน่วยความจำ
- ไบต์เสมือนเป็นชุดการทำงานพร้อมกับเพจส่วนตัวไบต์และรายการสแตนด์บาย
มีปัญหาอื่นที่นี่; เพียงแค่ห้องสมุดเป็นที่ใช้ร่วมกันสามารถจัดสรรหน่วยความจำภายในโมดูลใบสมัครของคุณที่นำไปสู่ความผิดพลาดที่อาจเกิดขึ้นในรายงานของแอป Bytes เอกชน, คุณแอพลิเคชันนี้ยังอาจจะจบลงจัดสรรหน่วยความจำภายในที่ใช้ร่วมกันโมดูลนำไปสู่การเท็จเชิงลบ นั่นหมายความว่าเป็นไปได้จริงที่แอปพลิเคชันของคุณจะมีหน่วยความจำรั่วซึ่งไม่เคยปรากฏตัวในไบต์ส่วนตัวเลย ไม่น่าเป็นไปได้ แต่เป็นไปได้
ไบต์ส่วนตัวเป็นการประมาณจำนวนหน่วยความจำที่ปฏิบัติการของคุณใช้อย่างเหมาะสมและสามารถใช้เพื่อช่วยจำกัดรายการผู้สมัครที่มีศักยภาพสำหรับการรั่วไหลของหน่วยความจำ หากคุณเห็นจำนวนที่เพิ่มขึ้นและเติบโตอย่างต่อเนื่องและไม่สิ้นสุดคุณจะต้องตรวจสอบกระบวนการรั่วไหล อย่างไรก็ตามสิ่งนี้ไม่สามารถพิสูจน์ได้ว่ามีหรือไม่มีการรั่วไหล
หนึ่งในเครื่องมือที่มีประสิทธิภาพที่สุดสำหรับการตรวจจับ / แก้ไขการรั่วไหลของหน่วยความจำใน Windows คือVisual Studio (ลิงค์ไปที่หน้าเกี่ยวกับการใช้ VS สำหรับการรั่วไหลของหน่วยความจำไม่ใช่หน้าผลิตภัณฑ์) Rational Purifyเป็นไปได้อีกอย่างหนึ่ง Microsoft ยังมีเอกสารแนวปฏิบัติที่ดีที่สุดทั่วไปเพิ่มเติมในเรื่องนี้ มีเครื่องมืออื่น ๆ ที่ระบุไว้ในนี้คำถามก่อนหน้านี้
ฉันหวังว่าสิ่งนี้จะล้างสิ่งเล็ก ๆ น้อย ๆ ! การติดตามการรั่วไหลของหน่วยความจำเป็นหนึ่งในสิ่งที่ยากที่สุดในการแก้ไขข้อบกพร่อง โชคดี.