หน่วยความจำรั่ว เป็นการวางทรัพยากรผิดที่ในโปรแกรมคอมพิวเตอร์เนื่องจากการจัดสรรหน่วยความจำผิดพลาด เกิดขึ้นเมื่อตำแหน่ง RAM ที่ไม่ได้ใช้งานยังไม่ถูกเผยแพร่ หน่วยความจำรั่วไม่ควรสับสนกับการรั่วไหลของพื้นที่ ซึ่งหมายถึงโปรแกรมที่ใช้ RAM เกินความจำเป็น มีการกล่าวกันว่าหน่วยความจำรั่วในระบบ Windows 11/10/8/7 เกิดขึ้นเมื่อหน่วยความจำไม่สามารถเข้าถึงได้แม้จะไม่ได้ใช้งานอยู่
หน่วยความจำรั่วใน Windows 11/10
ก่อนที่คุณจะเริ่มต้น คุณควรรู้ว่าหน่วยความจำรั่วไหลเป็นปัญหาของซอฟต์แวร์ที่ต้องแก้ไข เช่น ใน Java, JavaScript, C/C++, Windows เป็นต้น ไม่จำเป็นต้องเปลี่ยน RAM หรือฮาร์ดดิสก์จริง
ทำไมมันแย่จัง
เห็นได้ชัดว่าหน่วยความจำรั่วนั้นไม่ดีเพราะเป็นข้อบกพร่อง ข้อบกพร่องในระบบ แต่มาดูกันว่ามันส่งผลต่อระบบอย่างไร:
- เนื่องจากหน่วยความจำไม่ว่างแม้เมื่อไม่ได้ใช้งาน จึงส่งผลให้หน่วยความจำหมด
- ความจำเสื่อมส่งผลให้ซอฟต์แวร์มีอายุมากขึ้น
- หน่วยความจำที่ใช้ได้ลดลงทำให้เวลาตอบสนองเพิ่มขึ้นและประสิทธิภาพของระบบลดลง
- หน่วยความจำรั่วที่ไม่ได้ตรวจสอบในท้ายที่สุดอาจทำให้แอปพลิเคชันหยุดทำงาน
เพื่อระบุหน่วยความจำรั่ว โปรแกรมเมอร์จำเป็นต้องมีสิทธิ์เข้าถึงซอร์สโค้ดของโปรแกรม
การระบุตำแหน่งการรั่วไหล
เพื่อแก้ปัญหา เราต้องระบุมันก่อน ขั้นตอนพื้นฐานในการค้นหาหน่วยความจำรั่วมีดังนี้:
- การยืนยัน :การพิจารณาว่ามีการรั่วไหลเกิดขึ้นหรือไม่
- ค้นหาหน่วยความจำโหมดเคอร์เนลรั่ว :ค้นหาจุดรั่วที่เกิดจากส่วนประกอบไดรเวอร์โหมดเคอร์เนล
- ค้นหาหน่วยความจำรั่วในโหมดผู้ใช้ :ค้นหาจุดรั่วที่เกิดจากไดรเวอร์โหมดผู้ใช้หรือแอป
การจัดสรรหน่วยความจำ
มีโหมดต่างๆ ที่แอปพลิเคชันจัดสรรแรม หากไม่มีพื้นที่ว่างหลังการใช้งาน หน่วยความจำรั่วจะเกิดขึ้นโดยไม่คำนึงถึงโหมดการจัดสรร รูปแบบการจัดสรรทั่วไปได้แก่:
- ฟังก์ชัน HealAlloc สำหรับการจัดสรรหน่วยความจำฮีป รันไทม์ C/C++ ที่เทียบเท่ากันคือ malloc และใหม่
- ฟังก์ชัน VirtualAlloc สำหรับการจัดสรรโดยตรงจาก OS
- Kernel32 APIs เพื่อเก็บหน่วยความจำเคอร์เนลสำหรับแอป ตัวอย่าง CreateFile, CreateThread
- User32 API และ Gdi32 API
ป้องกันหน่วยความจำรั่วใน Windows
เราทุกคนทราบดีว่าการป้องกันดีกว่าการรักษา ดังนั้นนี่คือวิธีป้องกันหน่วยความจำรั่ว
การสังเกตนิสัย
คุณต้องจับตาดูการใช้ 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 แก้ปัญหาการรั่วไหลของหน่วยความจำในโค้ด
เคล็ดลับการใช้งาน
- ใช้เคอร์เนล จัดการ และตัวชี้อัจฉริยะอื่นๆ สำหรับทรัพยากร 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:
- บันทึกงานสำคัญทั้งหมดของคุณไว้
- กด ชนะ + R เพื่อเปิด เรียกใช้ หน้าต่าง.
- พิมพ์คำสั่ง mdsched.exe ในการ วิ่ง หน้าต่าง.
- รีสตาร์ทพีซี
- หลังจากรีสตาร์ทแล้ว ให้สแกนพื้นฐานหรือไปที่ ‘ขั้นสูง ' ตัวเลือกเช่น 'ทดสอบมิกซ์ ' หรือ 'จำนวนผ่าน ’.
- กด F10 เพื่อเริ่มการทดสอบ
สิ่งเหล่านี้ยังคงเป็นการแก้ไขชั่วคราว
3] ตรวจสอบการอัปเดตไดรเวอร์
ไดรเวอร์ที่ล้าสมัยทำให้เกิดการรั่วไหลของหน่วยความจำ อัปเดตไดรเวอร์ทั้งหมด:
- กด ชนะ + R และเปิด เรียกใช้ หน้าต่าง. พิมพ์ devmgmt.msc และกด Enter จะพาคุณไปที่ ตัวจัดการอุปกรณ์ .
- ตรวจหาไดรเวอร์ที่ล้าสมัยและอัปเดตทั้งหมด
- สำหรับการอัปเดตที่คุณอาจพลาดไป ให้ตรวจสอบใน Windows Update
นี่เป็นเรื่องง่าย
4] เพิ่มประสิทธิภาพ
การปรับ Windows สำหรับประสิทธิภาพจะจัดการทุกอย่างรวมถึงการจัดกำหนดการโปรเซสเซอร์และการใช้หน่วยความจำเพื่อหยุดการรั่วไหลของหน่วยความจำ ทำตามขั้นตอนเหล่านี้:
- คลิกขวาที่ ‘พีซีเครื่องนี้ ' และเลือก 'ขั้นสูง ’ ที่แผงด้านซ้าย
- ภายใต้ 'ขั้นสูง ' ไปที่ 'ประสิทธิภาพ ' ตามด้วย 'การตั้งค่า ’.
- ทำเครื่องหมายที่ 'ปรับเพื่อประสิทธิภาพที่ดีที่สุด ’ และคลิก ตกลง .
- รีสตาร์ทและตรวจสอบว่าปัญหาได้รับการแก้ไขหรือไม่
หากวิธีแก้ปัญหาง่ายๆ นี้ไม่ได้ผล ให้ลองวิธีแก้ไขปัญหาถัดไป
5] ปิดการใช้งานโปรแกรมที่ทำงานเมื่อเริ่มต้น
การปิดใช้งานโปรแกรมที่มีปัญหาเป็นวิธีเดียวที่จะกำจัดปัญหาหน่วยความจำรั่ว ไปที่ Task Manager และปิดการใช้งานโปรแกรมสร้างปัญหา หากคุณไม่ทราบว่าโปรแกรมใดสร้างปัญหา ให้ทำดังนี้:
- ไปที่ 'ตัวจัดการงาน ’.
- ไปที่ 'เริ่มต้น ’.
- ปิดใช้งานโปรแกรมเริ่มต้นที่คุณไม่จำเป็นต้องเรียกใช้โดยค่าเริ่มต้น
6] Defrag ฮาร์ดไดรฟ์
แม้ว่า Windows 10 จะทำสิ่งนี้ให้คุณโดยอัตโนมัติ แต่คุณอาจต้องทำการ Defrag ฮาร์ดไดรฟ์เป็นครั้งคราวเพื่อเพิ่มประสิทธิภาพ:
- ไปที่ 'พีซีเครื่องนี้ ' หรือ 'คอมพิวเตอร์ของฉัน ’.
- คลิกขวาที่ฮาร์ดไดรฟ์ของระบบ (ปกติคือไดรฟ์ C:)
- ไปที่ 'เครื่องมือ ' ภายใต้ 'คุณสมบัติ ' และเลือก 'เพิ่มประสิทธิภาพ ’.
- เลือกไดรฟ์ที่จะ Defrag และเลือก 'วิเคราะห์ ’.
รีสตาร์ทคอมพิวเตอร์หลังจากการแตกแฟรกเมนต์ใหม่
7] ไฟล์ ClearPage เมื่อปิดเครื่อง
ตอนนี้มันซับซ้อนขึ้น แต่อย่ากังวล ต่อไปนี้เป็นวิธีล้างไฟล์เพจเมื่อปิดเครื่องทุกครั้ง:
- พิมพ์ regedit ในการค้นหาเพื่อเปิดใช้ Registry Editor
- ป้อนเส้นทางนี้:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- เปลี่ยนค่าของ ClearPageFileAtShutDown เป็น '1'
- บันทึกการเปลี่ยนแปลงและรีสตาร์ทอุปกรณ์
นี้ควรจะทำ อย่าลืมว่ากระบวนการปิดระบบจะใช้เวลาเพิ่มขึ้นเล็กน้อย
9] ปิดการใช้งาน Superfetch
บริการ Windows นี้ปรับประสิทธิภาพการทำงานให้เหมาะสมโดยลดเวลาในการบู๊ต ช่วยให้ Windows จัดการการใช้ RAM ชีวิตหลังปิดใช้งาน Superfetch ไม่สะดวก แต่ทำถ้าคุณต้องการ อย่างน้อยก็ลองทำสิ่งนี้คนเดียวเพื่อแยกปัญหา:
- ค้นหา services.msc และไปที่ตัวจัดการบริการ
- มองหา 'Superfetch ' และคลิกขวาเพื่อไปที่ 'คุณสมบัติ ’.
- เลือก 'หยุด ’.
- นอกจากนี้ 'ปิดการใช้งาน ’ บริการจากเมนูแบบเลื่อนลง
- รีสตาร์ทพีซีและตรวจสอบว่าประสิทธิภาพดีขึ้นหรือไม่
เปิดใช้งาน Superfetch หากวิธีนี้ใช้ไม่ได้
10] ตรวจหามัลแวร์
ใช้ซอฟต์แวร์ป้องกันไวรัสของบริษัทอื่นหรือ Windows Defender ของ Windows 10 เพื่อสแกนและกำจัดมัลแวร์ ตรวจสอบให้แน่ใจว่าโปรแกรมป้องกันไวรัสได้รับการอัปเดตเพื่อรองรับระบบปฏิบัติการของคุณ เพื่อไม่ให้กลายเป็นสาเหตุของหน่วยความจำรั่ว
ทุกโซลูชันที่คุณอาจจำเป็นต้องค้นหาหรือป้องกันการรั่วไหลของหน่วยความจำอยู่ที่นี่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการรั่วไหลของหน่วยความจำใน MSDN และ Microsoft