Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

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

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

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

ทำไมมันแย่จัง

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

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

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

การระบุตำแหน่งการรั่วไหล

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

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

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

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

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

ป้องกันหน่วยความจำรั่วใน Windows

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

การสังเกตนิสัย

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/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. ใช้เคอร์เนล จัดการ และตัวชี้อัจฉริยะอื่นๆ สำหรับทรัพยากร 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] เครื่องมือวิเคราะห์หน่วยความจำ

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

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

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

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

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

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

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

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

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

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

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

5] ปิดการใช้งานโปรแกรมที่ทำงานเมื่อเริ่มต้น

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

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

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

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10

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

  1. ไปที่ 'พีซีเครื่องนี้ ' หรือ 'คอมพิวเตอร์ของฉัน ’.
  2. คลิกขวาที่ฮาร์ดไดรฟ์ของระบบ (ปกติคือไดรฟ์ C:)
  3. ไปที่ 'เครื่องมือ ' ภายใต้ 'คุณสมบัติ ' และเลือก 'เพิ่มประสิทธิภาพ ’.
  4. เลือกไดรฟ์ที่จะ Defrag และเลือก 'วิเคราะห์ ’.

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

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

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

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

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

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

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

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

เปิดใช้งาน Superfetch หากวิธีนี้ใช้ไม่ได้

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

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

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

วิธีค้นหาและแก้ไข Memory Leaks ใน Windows 11/10