หน่วยความจำรั่วเป็น misplacement ของทรัพยากรในโปรแกรมคอมพิวเตอร์เนื่องจากการจัดสรรหน่วยความจำที่ผิดพลาด จะเกิดขึ้นเมื่อตำแหน่ง RAM ที่ไม่ได้ใช้งานยังคงไม่ได้ใช้งาน อย่าสับสนระหว่างหน่วยความจำรั่วกับการรั่วไหลของพื้นที่ซึ่งหมายถึงโปรแกรมที่ใช้ RAM มากเกินความจำเป็น มีการกล่าวกันว่าหน่วยความจำรั่วในระบบ Windows 10/8/7 เกิดขึ้นเมื่อไม่สามารถเข้าถึงหน่วยความจำได้แม้ว่าจะไม่ได้ใช้งานก็ตาม
หน่วยความจำรั่วใน Windows 10
ก่อนที่คุณจะเริ่มต้นคุณควรทราบว่าหน่วยความจำรั่วเป็นปัญหาของซอฟต์แวร์ในการดีบักตัวอย่างเช่นใน Java, JavaScript, C / C ++, Windows เป็นต้นไม่จำเป็นต้องเปลี่ยน RAM หรือฮาร์ดดิสก์
ทำไมถึงไม่ดี
เห็นได้ชัดว่าการรั่วไหลของหน่วยความจำไม่ดีเนื่องจากเป็นข้อบกพร่องข้อบกพร่องในระบบ แต่มาดูกันว่ามันมีผลต่อระบบอย่างไร:
- เนื่องจากหน่วยความจำไม่ได้รับการปลดปล่อยแม้ว่าจะไม่ได้ใช้งานก็ตามจึงส่งผลให้หน่วยความจำหมดลง
- การอ่อนล้าของหน่วยความจำส่งผลให้ซอฟต์แวร์มีอายุการใช้งาน
- หน่วยความจำที่มีอยู่ลดลงทำให้เวลาตอบสนองเพิ่มขึ้นและระบบมีประสิทธิภาพต่ำ
- การรั่วไหลของหน่วยความจำที่ไม่ได้ตรวจสอบในที่สุดอาจทำให้แอปพลิเคชันหยุดทำงานได้
ในการระบุหน่วยความจำรั่วโปรแกรมเมอร์จำเป็นต้องเข้าถึงซอร์สโค้ดของโปรแกรม
ค้นหาจุดรั่ว
ในการแก้ปัญหาเราจำเป็นต้องระบุก่อน ขั้นตอนพื้นฐานในการค้นหาหน่วยความจำรั่วคือ:
- การยืนยัน : การพิจารณาว่ามีการรั่วไหลหรือไม่
- การค้นหาการรั่วไหลของหน่วยความจำโหมดเคอร์เนล : การค้นหาการรั่วไหลที่เกิดจากส่วนประกอบไดรเวอร์โหมดเคอร์เนล
- การค้นหาการรั่วไหลของหน่วยความจำในโหมดผู้ใช้ : การค้นหาการรั่วไหลที่เกิดจากไดรเวอร์หรือแอปโหมดผู้ใช้
การจัดสรรหน่วยความจำ
มีโหมดต่างๆที่แอปพลิเคชันจัดสรร RAM หากพื้นที่ว่างไม่ได้รับการปลดปล่อยหลังการใช้งานหน่วยความจำรั่วจะเกิดขึ้นโดยไม่คำนึงถึงโหมดการจัดสรร รูปแบบการจัดสรรทั่วไป ได้แก่ :
- ฟังก์ชัน HealAlloc สำหรับการจัดสรรหน่วยความจำฮีป สิ่งที่เทียบเท่ารันไทม์ C / C ++ คือ malloc และใหม่
- ฟังก์ชัน VirtualAlloc สำหรับการจัดสรรโดยตรงจาก OS
- Kernel32 API เพื่อเก็บหน่วยความจำเคอร์เนลสำหรับแอป ตัวอย่าง CreateFile, CreateThread
- User32 APIs และ Gdi32 APIs
การป้องกันการรั่วไหลของหน่วยความจำ
เราทุกคนรู้ดีว่าการป้องกันดีกว่าการรักษาดังนั้นนี่คือวิธีป้องกันความจำรั่วไหล
นิสัยการตรวจสอบ
คุณต้องจับตาดูการใช้ RAM ที่ผิดปกติจากแต่ละโปรแกรมและแอปพลิเคชัน คุณสามารถไปที่ Windows Task Manager ได้โดยกดCTRL + SHIFT + ESCและเพิ่มคอลัมน์เช่น Handles, User Objects, GDI Objects เป็นต้น
วิธีนี้จะช่วยให้คุณตรวจสอบการใช้ทรัพยากรได้อย่างง่ายดาย
เครื่องมือของ Microsoft เพื่อวินิจฉัยการรั่วไหลของหน่วยความจำ
เครื่องมือต่างๆวินิจฉัยการรั่วไหลของหน่วยความจำสำหรับโหมดการจัดสรรต่างๆ:
- Application Verifier วินิจฉัยการรั่วไหลของฮีป
- UMDH (ส่วนประกอบของ Windows Debugging Tools) จะวินิจฉัยการรั่วไหลของแต่ละกระบวนการโดยการมอนิเตอร์การจัดสรรหน่วยความจำฮีป
- Trace Capture สำหรับการวิเคราะห์การใช้ RAM อย่างละเอียด
- Xperf ติดตามรูปแบบการจัดสรรฮีปด้วยเช่นกัน
- CRT Debug Heap ไม่เพียง แต่ติดตามการจัดสรรฮีปเท่านั้น แต่ยังช่วยให้การเข้ารหัสเพื่อลดการรั่วไหล
- JavaScript Memory Leak Detector แก้ปัญหาการรั่วไหลของหน่วยความจำในรหัส
เคล็ดลับการใช้งาน
- ใช้เคอร์เนลHANDLEและตัวชี้อัจฉริยะอื่น ๆ สำหรับทรัพยากร Win32 และการจัดสรรฮีป
- รับคลาสสำหรับการจัดการทรัพยากรอัตโนมัติสำหรับการจัดสรรเคอร์เนลจากไลบรารี ATL มาตรฐาน C ++ มีauto_ptrสำหรับการจัดสรรฮีป
- แค็ปซูล COM อินเตอร์เฟซชี้ภายใน“ชี้สมาร์ท” ด้วยความช่วยเหลือของ_com_ptr_tหรือ_bstr_tหรือ_variant_t
- ตรวจสอบรหัส. NET สำหรับการใช้งานหน่วยความจำที่ผิดปกติ
- หลีกเลี่ยงเส้นทางออกหลายเส้นทางสำหรับฟังก์ชันเพื่อให้การจัดสรรเป็นอิสระจากตัวแปรในบล็อกส่วนใหญ่เมื่อสิ้นสุดฟังก์ชัน
- ใช้ข้อยกเว้นดั้งเดิมหลังจากยกเลิกการจัดสรรทั้งหมดในบล็อก _finally เท่านั้น รวมฮีปทั้งหมดและจัดการการจัดสรรไว้ในตัวชี้อัจฉริยะเพื่อใช้ข้อยกเว้น C ++
- เรียกใช้ฟังก์ชันPropVariantClear ทุกครั้งก่อนที่จะเริ่มต้นใหม่หรือทิ้งออบเจ็กต์ PROPVARIANT
การแก้ไขปัญหาหน่วยความจำรั่วใน Windows
เช่นเดียวกับวิธีต่างๆในการป้องกันการรั่วไหลของหน่วยความจำมีหลายวิธีในการหยุดการรั่วไหลของหน่วยความจำ แต่ก่อนจะเริ่มอย่าลืมสร้างจุดคืนค่าระบบก่อน
1] ปิดกระบวนการและเริ่มต้นใหม่
หากคุณเห็นว่ากระบวนการที่ไม่จำเป็นใช้ RAM มากเกินไปคุณสามารถสิ้นสุดกระบวนการได้ในตัวจัดการงาน คุณจะต้องรีสตาร์ทอุปกรณ์เพื่อให้มีพื้นที่ว่างสำหรับใช้ในกระบวนการอื่น ๆ หากไม่มีปัญหาการรีสตาร์ทหน่วยความจำรั่วจะไม่สามารถแก้ไขได้ กระบวนการหนึ่งที่มีข้อบกพร่องที่ทำให้พีซีทำงานช้าลงคือ Runtime Broker ลองถ้าปิดใช้งานเพียงอย่างเดียว
2] เครื่องมือวินิจฉัยหน่วยความจำ
ในการเข้าถึงเครื่องมือวินิจฉัยหน่วยความจำในตัวสำหรับ Windows:
- บันทึกงานสำคัญทั้งหมดของคุณ
- กดWin + Rเพื่อเปิดหน้าต่างRun
- พิมพ์คำสั่งmdsched.exeในหน้าต่างRun
- รีสตาร์ทพีซี
- หลังจากรีสตาร์ทให้ทำการสแกนขั้นพื้นฐานหรือไปที่ตัวเลือก " ขั้นสูง " เช่น " การทดสอบผสม " หรือ " จำนวนการผ่าน "
- กดF10เพื่อเริ่มการทดสอบ
สิ่งเหล่านี้ยังคงเป็นการแก้ไขชั่วคราว
3] ตรวจสอบการอัปเดตไดรเวอร์
ไดรเวอร์ที่ล้าสมัยทำให้หน่วยความจำรั่วไหล อัปเดตไดรเวอร์ทั้งหมด:
- กดWin + Rแล้วเปิดหน้าต่างRun พิมพ์devmgmt.mscแล้วกด Enter มันจะพาคุณไปจัดการอุปกรณ์
- ตรวจสอบไดรเวอร์ที่ล้าสมัยและอัปเดตทั้งหมด
- สำหรับการอัปเดตที่คุณอาจพลาดไปให้ตรวจสอบใน Windows Update
นี่เป็นเรื่องง่าย
4] เพิ่มประสิทธิภาพ
การปรับ Windows เพื่อประสิทธิภาพจะจัดการทุกอย่างรวมถึงการตั้งเวลาโปรเซสเซอร์และการใช้หน่วยความจำเพื่อหยุดการรั่วไหลของหน่วยความจำ ทำตามขั้นตอนเหล่านี้:
- คลิกขวาที่ ' พีซีเครื่องนี้ ' และเลือกการตั้งค่า ' ขั้นสูง ' ในบานหน้าต่างด้านซ้าย
- ภายใต้แท็บ " ขั้นสูง " ไปที่ " ประสิทธิภาพ " ตามด้วย " การตั้งค่า "
- ตรวจสอบ ' ปรับเพื่อให้ประสิทธิภาพที่ดีที่สุด ' และคลิกตกลง
- รีสตาร์ทและตรวจสอบว่าปัญหาได้รับการแก้ไขหรือไม่
หากวิธีง่ายๆนี้ไม่ได้ผลให้ลองวิธีแก้ไขปัญหาถัดไป
5] ปิดการใช้งานโปรแกรมที่ทำงานบน Startup
การปิดใช้งานโปรแกรมที่ยุ่งยากเป็นวิธีเดียวที่จะกำจัดปัญหาหน่วยความจำรั่ว ไปที่ตัวจัดการงานและปิดใช้งานโปรแกรมแก้ไขปัญหา หากคุณไม่ทราบว่าโปรแกรมใดสร้างปัญหาให้ทำดังนี้
- ไปที่ ' ตัวจัดการงาน '
- ไปที่ ' เริ่มต้น '
- ปิดใช้งานโปรแกรมเริ่มต้นที่คุณไม่จำเป็นต้องเรียกใช้โดยค่าเริ่มต้น
6] Defrag ฮาร์ดไดรฟ์
แม้ว่า Windows 10 จะทำสิ่งนี้ให้คุณโดยอัตโนมัติ แต่คุณอาจต้องทำการ Defrag ฮาร์ดไดรฟ์เป็นครั้งคราวเพื่อเพิ่มประสิทธิภาพ:
- ไปที่ ' พีซีเครื่องนี้ ' หรือ ' คอมพิวเตอร์ของฉัน '
- คลิกขวาที่ฮาร์ดไดรฟ์ระบบ (โดยทั่วไปคือ C: drive)
- ไปที่ ' Tools ' ภายใต้ ' Properties ' และเลือก ' Optimize '
- เลือกไดรฟ์ที่จะจัดเรียงข้อมูลและเลือก ' วิเคราะห์ '
รีสตาร์ทคอมพิวเตอร์ของคุณหลังจากการแยกส่วนใหม่
7] ไฟล์ ClearPage เมื่อปิดเครื่อง
ตอนนี้เริ่มซับซ้อน - แต่ไม่ต้องกังวล วิธีล้างไฟล์เพจทุกครั้งที่ปิดเครื่อง:
- พิมพ์regeditบน Search เพื่อเปิด Registry Editor
- เข้าสู่เส้นทางนี้:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager การจัดการหน่วยความจำ
- เปลี่ยนค่าของClearPageFileAtShutDown เป็น '1'
- บันทึกการเปลี่ยนแปลงและรีสตาร์ทอุปกรณ์
สิ่งนี้ควรทำ อย่าลืมว่ากระบวนการปิดระบบของคุณจะใช้เวลาเพิ่มขึ้นเล็กน้อย
9] ปิดใช้งาน Superfetch
บริการ Windows นี้เพิ่มประสิทธิภาพโดยลดเวลาในการบูตให้น้อยที่สุด ช่วยให้ Windows จัดการการใช้ RAM ชีวิตหลังจากปิดใช้งาน Superfetch ไม่สะดวก แต่ให้ทำถ้าคุณต้องทำ อย่างน้อยก็ลองทำสิ่งนี้เพียงอย่างเดียวเพื่อแยกปัญหา:
- ค้นหาservices.mscและไปที่ Services Manager
- มองหา ' Superfetch ' และคลิกขวาเพื่อไปที่ ' Properties '
- เลือก ' หยุด '
- ' ปิดการใช้งาน ' บริการจากเมนูแบบเลื่อนลงด้วย
- รีสตาร์ทพีซีและตรวจสอบว่าประสิทธิภาพดีขึ้นหรือไม่
เปิดใช้ Superfetch หากไม่ได้ผล
10] ตรวจหามัลแวร์
ใช้ซอฟต์แวร์ป้องกันไวรัสของ บริษัท อื่นหรือ Windows Defender ภายในของ Windows 10 เพื่อสแกนและกำจัดมัลแวร์ ตรวจสอบให้แน่ใจว่าโปรแกรมป้องกันไวรัสได้รับการอัปเดตเพื่อรองรับระบบปฏิบัติการของคุณเพื่อไม่ให้กลายเป็นสาเหตุของการรั่วไหลของหน่วยความจำ
ทุกวิธีที่คุณอาจต้องหาหรือป้องกันการรั่วไหลของหน่วยความจำอยู่ที่นี่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการรั่วไหลของหน่วยความจำบน MSDN และ Microsoft