ค้นหาและแก้ไข Memory Leaks ใน Windows 10

หน่วยความจำรั่วเป็น misplacement ของทรัพยากรในโปรแกรมคอมพิวเตอร์เนื่องจากการจัดสรรหน่วยความจำที่ผิดพลาด จะเกิดขึ้นเมื่อตำแหน่ง RAM ที่ไม่ได้ใช้งานยังคงไม่ได้ใช้งาน อย่าสับสนระหว่างหน่วยความจำรั่วกับการรั่วไหลของพื้นที่ซึ่งหมายถึงโปรแกรมที่ใช้ RAM มากเกินความจำเป็น มีการกล่าวกันว่าหน่วยความจำรั่วในระบบ Windows 10/8/7 เกิดขึ้นเมื่อไม่สามารถเข้าถึงหน่วยความจำได้แม้ว่าจะไม่ได้ใช้งานก็ตาม

หน่วยความจำรั่วใน Windows 10

ก่อนที่คุณจะเริ่มต้นคุณควรทราบว่าหน่วยความจำรั่วเป็นปัญหาของซอฟต์แวร์ในการดีบักตัวอย่างเช่นใน Java, JavaScript, C / C ++, Windows เป็นต้นไม่จำเป็นต้องเปลี่ยน RAM หรือฮาร์ดดิสก์

หน่วยความจำรั่วใน Windows 10

ทำไมถึงไม่ดี

เห็นได้ชัดว่าการรั่วไหลของหน่วยความจำไม่ดีเนื่องจากเป็นข้อบกพร่องข้อบกพร่องในระบบ แต่มาดูกันว่ามันมีผลต่อระบบอย่างไร:

  1. เนื่องจากหน่วยความจำไม่ได้รับการปลดปล่อยแม้ว่าจะไม่ได้ใช้งานก็ตามจึงส่งผลให้หน่วยความจำหมดลง
  2. การอ่อนล้าของหน่วยความจำส่งผลให้ซอฟต์แวร์มีอายุการใช้งาน
  3. หน่วยความจำที่มีอยู่ลดลงทำให้เวลาตอบสนองเพิ่มขึ้นและระบบมีประสิทธิภาพต่ำ
  4. การรั่วไหลของหน่วยความจำที่ไม่ได้ตรวจสอบในที่สุดอาจทำให้แอปพลิเคชันหยุดทำงานได้

ในการระบุหน่วยความจำรั่วโปรแกรมเมอร์จำเป็นต้องเข้าถึงซอร์สโค้ดของโปรแกรม

ค้นหาจุดรั่ว

ในการแก้ปัญหาเราจำเป็นต้องระบุก่อน ขั้นตอนพื้นฐานในการค้นหาหน่วยความจำรั่วคือ:

  1. การยืนยัน : การพิจารณาว่ามีการรั่วไหลหรือไม่
  2. การค้นหาการรั่วไหลของหน่วยความจำโหมดเคอร์เนล : การค้นหาการรั่วไหลที่เกิดจากส่วนประกอบไดรเวอร์โหมดเคอร์เนล
  3. การค้นหาการรั่วไหลของหน่วยความจำในโหมดผู้ใช้ : การค้นหาการรั่วไหลที่เกิดจากไดรเวอร์หรือแอปโหมดผู้ใช้

การจัดสรรหน่วยความจำ

มีโหมดต่างๆที่แอปพลิเคชันจัดสรร RAM หากพื้นที่ว่างไม่ได้รับการปลดปล่อยหลังการใช้งานหน่วยความจำรั่วจะเกิดขึ้นโดยไม่คำนึงถึงโหมดการจัดสรร รูปแบบการจัดสรรทั่วไป ได้แก่ :

  1. ฟังก์ชัน HealAlloc สำหรับการจัดสรรหน่วยความจำฮีป สิ่งที่เทียบเท่ารันไทม์ C / C ++ คือ malloc และใหม่
  2. ฟังก์ชัน VirtualAlloc สำหรับการจัดสรรโดยตรงจาก OS
  3. Kernel32 API เพื่อเก็บหน่วยความจำเคอร์เนลสำหรับแอป ตัวอย่าง CreateFile, CreateThread
  4. User32 APIs และ Gdi32 APIs

การป้องกันการรั่วไหลของหน่วยความจำ

เราทุกคนรู้ดีว่าการป้องกันดีกว่าการรักษาดังนั้นนี่คือวิธีป้องกันความจำรั่วไหล

นิสัยการตรวจสอบ

หน่วยความจำรั่วใน Windows 10

คุณต้องจับตาดูการใช้ RAM ที่ผิดปกติจากแต่ละโปรแกรมและแอปพลิเคชัน คุณสามารถไปที่ Windows Task Manager ได้โดยกดCTRL + SHIFT + ESCและเพิ่มคอลัมน์เช่น Handles, User Objects, GDI Objects เป็นต้น

วิธีนี้จะช่วยให้คุณตรวจสอบการใช้ทรัพยากรได้อย่างง่ายดาย

เครื่องมือของ Microsoft เพื่อวินิจฉัยการรั่วไหลของหน่วยความจำ

เครื่องมือต่างๆวินิจฉัยการรั่วไหลของหน่วยความจำสำหรับโหมดการจัดสรรต่างๆ:

  1. Application Verifier วินิจฉัยการรั่วไหลของฮีป
  2. UMDH (ส่วนประกอบของ Windows Debugging Tools) จะวินิจฉัยการรั่วไหลของแต่ละกระบวนการโดยการมอนิเตอร์การจัดสรรหน่วยความจำฮีป
  3. Trace Capture สำหรับการวิเคราะห์การใช้ RAM อย่างละเอียด
  4. Xperf ติดตามรูปแบบการจัดสรรฮีปด้วยเช่นกัน
  5. CRT Debug Heap ไม่เพียง แต่ติดตามการจัดสรรฮีปเท่านั้น แต่ยังช่วยให้การเข้ารหัสเพื่อลดการรั่วไหล
  6. JavaScript Memory Leak Detector แก้ปัญหาการรั่วไหลของหน่วยความจำในรหัส

เคล็ดลับการใช้งาน

  1. ใช้เคอร์เนลHANDLEและตัวชี้อัจฉริยะอื่น ๆ สำหรับทรัพยากร Win32 และการจัดสรรฮีป
  2. รับคลาสสำหรับการจัดการทรัพยากรอัตโนมัติสำหรับการจัดสรรเคอร์เนลจากไลบรารี ATL มาตรฐาน C ++ มีauto_ptrสำหรับการจัดสรรฮีป
  3. แค็ปซูล COM อินเตอร์เฟซชี้ภายใน“ชี้สมาร์ท” ด้วยความช่วยเหลือของ_com_ptr_tหรือ_bstr_tหรือ_variant_t
  4. ตรวจสอบรหัส. NET สำหรับการใช้งานหน่วยความจำที่ผิดปกติ
  5. หลีกเลี่ยงเส้นทางออกหลายเส้นทางสำหรับฟังก์ชันเพื่อให้การจัดสรรเป็นอิสระจากตัวแปรในบล็อกส่วนใหญ่เมื่อสิ้นสุดฟังก์ชัน
  6. ใช้ข้อยกเว้นดั้งเดิมหลังจากยกเลิกการจัดสรรทั้งหมดในบล็อก _finally เท่านั้น รวมฮีปทั้งหมดและจัดการการจัดสรรไว้ในตัวชี้อัจฉริยะเพื่อใช้ข้อยกเว้น C ++
  7. เรียกใช้ฟังก์ชันPropVariantClear ทุกครั้งก่อนที่จะเริ่มต้นใหม่หรือทิ้งออบเจ็กต์ PROPVARIANT

การแก้ไขปัญหาหน่วยความจำรั่วใน Windows

เช่นเดียวกับวิธีต่างๆในการป้องกันการรั่วไหลของหน่วยความจำมีหลายวิธีในการหยุดการรั่วไหลของหน่วยความจำ แต่ก่อนจะเริ่มอย่าลืมสร้างจุดคืนค่าระบบก่อน

1] ปิดกระบวนการและเริ่มต้นใหม่

หากคุณเห็นว่ากระบวนการที่ไม่จำเป็นใช้ RAM มากเกินไปคุณสามารถสิ้นสุดกระบวนการได้ในตัวจัดการงาน คุณจะต้องรีสตาร์ทอุปกรณ์เพื่อให้มีพื้นที่ว่างสำหรับใช้ในกระบวนการอื่น ๆ หากไม่มีปัญหาการรีสตาร์ทหน่วยความจำรั่วจะไม่สามารถแก้ไขได้ กระบวนการหนึ่งที่มีข้อบกพร่องที่ทำให้พีซีทำงานช้าลงคือ Runtime Broker ลองถ้าปิดใช้งานเพียงอย่างเดียว

2] เครื่องมือวินิจฉัยหน่วยความจำ

การวินิจฉัยหน่วยความจำของ Windows

ในการเข้าถึงเครื่องมือวินิจฉัยหน่วยความจำในตัวสำหรับ Windows:

  1. บันทึกงานสำคัญทั้งหมดของคุณ
  2. กดWin + Rเพื่อเปิดหน้าต่างRun
  3. พิมพ์คำสั่งmdsched.exeในหน้าต่างRun
  4. รีสตาร์ทพีซี
  5. หลังจากรีสตาร์ทให้ทำการสแกนขั้นพื้นฐานหรือไปที่ตัวเลือก " ขั้นสูง " เช่น " การทดสอบผสม " หรือ " จำนวนการผ่าน "
  6. กดF10เพื่อเริ่มการทดสอบ

สิ่งเหล่านี้ยังคงเป็นการแก้ไขชั่วคราว

3] ตรวจสอบการอัปเดตไดรเวอร์

อัปเดตซอฟต์แวร์ไดรเวอร์

ไดรเวอร์ที่ล้าสมัยทำให้หน่วยความจำรั่วไหล อัปเดตไดรเวอร์ทั้งหมด:

  1. กดWin + Rแล้วเปิดหน้าต่างRun พิมพ์devmgmt.mscแล้วกด Enter มันจะพาคุณไปจัดการอุปกรณ์
  2. ตรวจสอบไดรเวอร์ที่ล้าสมัยและอัปเดตทั้งหมด
  3. สำหรับการอัปเดตที่คุณอาจพลาดไปให้ตรวจสอบใน Windows Update

นี่เป็นเรื่องง่าย

4] เพิ่มประสิทธิภาพ

ปรับเพื่อประสิทธิภาพที่ดีที่สุด

การปรับ Windows เพื่อประสิทธิภาพจะจัดการทุกอย่างรวมถึงการตั้งเวลาโปรเซสเซอร์และการใช้หน่วยความจำเพื่อหยุดการรั่วไหลของหน่วยความจำ ทำตามขั้นตอนเหล่านี้:

  1. คลิกขวาที่ ' พีซีเครื่องนี้ ' และเลือกการตั้งค่า ' ขั้นสูง ' ในบานหน้าต่างด้านซ้าย
  2. ภายใต้แท็บ " ขั้นสูง " ไปที่ " ประสิทธิภาพ " ตามด้วย " การตั้งค่า "
  3. ตรวจสอบ ' ปรับเพื่อให้ประสิทธิภาพที่ดีที่สุด ' และคลิกตกลง
  4. รีสตาร์ทและตรวจสอบว่าปัญหาได้รับการแก้ไขหรือไม่

หากวิธีง่ายๆนี้ไม่ได้ผลให้ลองวิธีแก้ไขปัญหาถัดไป

5] ปิดการใช้งานโปรแกรมที่ทำงานบน Startup

โปรแกรมเริ่มต้น

การปิดใช้งานโปรแกรมที่ยุ่งยากเป็นวิธีเดียวที่จะกำจัดปัญหาหน่วยความจำรั่ว ไปที่ตัวจัดการงานและปิดใช้งานโปรแกรมแก้ไขปัญหา หากคุณไม่ทราบว่าโปรแกรมใดสร้างปัญหาให้ทำดังนี้

  1. ไปที่ ' ตัวจัดการงาน '
  2. ไปที่ ' เริ่มต้น '
  3. ปิดใช้งานโปรแกรมเริ่มต้นที่คุณไม่จำเป็นต้องเรียกใช้โดยค่าเริ่มต้น

6] Defrag ฮาร์ดไดรฟ์

การจัดเรียงข้อมูลบนดิสก์

แม้ว่า Windows 10 จะทำสิ่งนี้ให้คุณโดยอัตโนมัติ แต่คุณอาจต้องทำการ Defrag ฮาร์ดไดรฟ์เป็นครั้งคราวเพื่อเพิ่มประสิทธิภาพ:

  1. ไปที่ ' พีซีเครื่องนี้ ' หรือ ' คอมพิวเตอร์ของฉัน '
  2. คลิกขวาที่ฮาร์ดไดรฟ์ระบบ (โดยทั่วไปคือ C: drive)
  3. ไปที่ ' Tools ' ภายใต้ ' Properties ' และเลือก ' Optimize '
  4. เลือกไดรฟ์ที่จะจัดเรียงข้อมูลและเลือก ' วิเคราะห์ '

รีสตาร์ทคอมพิวเตอร์ของคุณหลังจากการแยกส่วนใหม่

7] ไฟล์ ClearPage เมื่อปิดเครื่อง

ตอนนี้เริ่มซับซ้อน - แต่ไม่ต้องกังวล วิธีล้างไฟล์เพจทุกครั้งที่ปิดเครื่อง:

  • พิมพ์regeditบน Search เพื่อเปิด Registry Editor
  • เข้าสู่เส้นทางนี้:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager การจัดการหน่วยความจำ
  • เปลี่ยนค่าของClearPageFileAtShutDown เป็น '1'
  • บันทึกการเปลี่ยนแปลงและรีสตาร์ทอุปกรณ์

สิ่งนี้ควรทำ อย่าลืมว่ากระบวนการปิดระบบของคุณจะใช้เวลาเพิ่มขึ้นเล็กน้อย

9] ปิดใช้งาน Superfetch

บริการ Windows นี้เพิ่มประสิทธิภาพโดยลดเวลาในการบูตให้น้อยที่สุด ช่วยให้ Windows จัดการการใช้ RAM ชีวิตหลังจากปิดใช้งาน Superfetch ไม่สะดวก แต่ให้ทำถ้าคุณต้องทำ อย่างน้อยก็ลองทำสิ่งนี้เพียงอย่างเดียวเพื่อแยกปัญหา:

  1. ค้นหาservices.mscและไปที่ Services Manager
  2. มองหา ' Superfetch ' และคลิกขวาเพื่อไปที่ ' Properties '
  3. เลือก ' หยุด '
  4. ' ปิดการใช้งาน ' บริการจากเมนูแบบเลื่อนลงด้วย
  5. รีสตาร์ทพีซีและตรวจสอบว่าประสิทธิภาพดีขึ้นหรือไม่

เปิดใช้ Superfetch หากไม่ได้ผล

10] ตรวจหามัลแวร์

ใช้ซอฟต์แวร์ป้องกันไวรัสของ บริษัท อื่นหรือ Windows Defender ภายในของ Windows 10 เพื่อสแกนและกำจัดมัลแวร์ ตรวจสอบให้แน่ใจว่าโปรแกรมป้องกันไวรัสได้รับการอัปเดตเพื่อรองรับระบบปฏิบัติการของคุณเพื่อไม่ให้กลายเป็นสาเหตุของการรั่วไหลของหน่วยความจำ

ทุกวิธีที่คุณอาจต้องหาหรือป้องกันการรั่วไหลของหน่วยความจำอยู่ที่นี่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการรั่วไหลของหน่วยความจำบน MSDN และ Microsoft

Original text


หน่วยความจำรั่วใน Windows 10