ค้นหาและแก้ไข Memory Leaks ใน Windows 11/10
หน่วย ความจำรั่ว(Memory Leak)คือการวางทรัพยากรที่ไม่ถูกต้องในโปรแกรมคอมพิวเตอร์เนื่องจากการจัดสรรหน่วยความจำผิดพลาด เกิดขึ้นเมื่อตำแหน่งRAMที่ไม่ได้ใช้งานยังคงไม่ถูกเผยแพร่ หน่วยความจำรั่วไม่ควรสับสนกับการรั่วไหลของพื้นที่ ซึ่งหมายถึงโปรแกรมที่ใช้RAMเกินความจำเป็น มีการกล่าวกันว่าหน่วยความจำรั่วในWindows 11/10/8/7เกิดขึ้นเมื่อหน่วยความจำไม่สามารถเข้าถึงได้แม้ว่าจะไม่ได้ใช้งานอยู่ก็ตาม
หน่วยความจำรั่วใน Windows 11/10
ก่อนที่คุณจะเริ่มต้น คุณควรรู้ว่าหน่วยความจำ(Memory)รั่วไหลเป็นปัญหาของซอฟต์แวร์ที่ต้องแก้ไข ตัวอย่างเช่น ในJava , JavaScript , C/C++, Windowsฯลฯ ไม่จำเป็นต้องเปลี่ยนRAMหรือฮาร์ดดิสก์ ทางกายภาพ
ทำไมมันแย่
เห็นได้ชัดว่าหน่วยความจำรั่วนั้นไม่ดีเพราะเป็นข้อบกพร่อง ข้อบกพร่องในระบบ แต่มาดูกันว่ามันส่งผลต่อระบบอย่างไร:
- เนื่องจากหน่วยความจำจะไม่ว่างแม้เมื่อไม่ได้ใช้งาน จึงส่งผลให้หน่วยความจำหมด
- ความอ่อนล้าของหน่วยความจำส่งผลให้เกิดอายุซอฟต์แวร์
- หน่วยความจำที่ลดลงทำให้เวลาตอบสนองเพิ่มขึ้นและประสิทธิภาพของระบบลดลง
- การรั่วไหลของหน่วยความจำที่ไม่ได้ตรวจสอบในท้ายที่สุดอาจนำไปสู่ความผิดพลาดของแอปพลิเคชัน
เพื่อระบุหน่วยความจำรั่ว โปรแกรมเมอร์จำเป็นต้องเข้าถึงซอร์สโค้ดของโปรแกรม
ค้นหาจุดรั่ว
เพื่อแก้ปัญหา เราต้องระบุมันก่อน ขั้นตอนพื้นฐานในการค้นหาหน่วยความจำรั่วคือ:
- การยืนยัน(Affirmation) : การพิจารณาว่ามีการรั่วไหลเกิดขึ้นหรือไม่.
- การค้นหาหน่วยความจำโหมดเคอร์เนลรั่ว(Finding Kernel-mode memory leak) : การค้นหาการรั่วที่เกิดจากส่วนประกอบไดรเวอร์โหมดเคอร์เนล
- การค้นหาหน่วยความจำรั่วในโหมดผู้ใช้(Finding User-mode memory leak) : การค้นหาการรั่วที่เกิดจากไดรเวอร์โหมดผู้ใช้หรือแอป
การจัดสรรหน่วยความจำ
มีโหมดต่างๆ ที่แอปพลิเคชันจัดสรรRAM หากไม่มีพื้นที่ว่างหลังการใช้งาน หน่วยความจำรั่วจะเกิดขึ้นโดยไม่คำนึงถึงโหมดการจัดสรร รูปแบบการจัดสรรทั่วไปบางรูปแบบ ได้แก่
- ฟังก์ชัน HealAlloc(HealAlloc)สำหรับการจัดสรรหน่วยความจำฮีป เทียบเท่ารันไทม์ C/C++ คือ malloc และใหม่
- ฟังก์ชัน VirtualAlloc(VirtualAlloc)สำหรับการจัดสรรโดยตรงจาก OS
- Kernel32 APIsเพื่อเก็บหน่วยความจำเคอร์เนลสำหรับแอป ตัวอย่าง(Example)CreateFile , CreateThread _ _
- User32 API และ Gdi32 API
ป้องกันการรั่วไหลของหน่วยความจำใน Windows
เราทุกคนรู้ดีว่าการป้องกันดีกว่าการรักษา ดังนั้นนี่คือวิธีป้องกันหน่วยความจำรั่ว
ติดตามนิสัย
คุณต้องจับตาดูการ ใช้ RAM ที่ผิดปกติ โดยโปรแกรมและแอปพลิเคชันแต่ละรายการ คุณสามารถไปที่Windows Task Managerได้โดยกดCTRL+SHIFT+ESCและเพิ่มคอลัมน์ เช่นHandles , User Objects , GDI Objectsเป็นต้น
ซึ่งจะช่วยให้คุณตรวจสอบการใช้ทรัพยากรได้อย่างง่ายดาย
อ่าน(Read) : ประเภทของหน่วยความจำในคอมพิวเตอร์คืออะไร?(What are the Types of Memory in a computer?)
เครื่องมือ ของ Microsoft(Microsoft)เพื่อวินิจฉัยการรั่วไหลของหน่วยความจำ
เครื่องมือต่างๆ วินิจฉัยการรั่วไหลของหน่วยความจำสำหรับโหมดการจัดสรรต่างๆ:
- Application Verifierวินิจฉัยการรั่วไหลของฮีป
- UMDH ( ส่วนประกอบของWindows Debugging Tools ) วินิจฉัยการรั่วไหลสำหรับแต่ละกระบวนการโดยการตรวจสอบการจัดสรรหน่วยความจำฮีป
- Trace Captureสำหรับการวิเคราะห์การใช้RAM อย่างละเอียด(RAM)
- Xperf จะติดตามรูปแบบการจัดสรรฮีพด้วย
- CRT Debug Heapไม่เพียงแต่ติดตามการจัดสรรฮีปเท่านั้น แต่ยังเปิดใช้งานแนวทางการเข้ารหัสเพื่อลดการรั่วไหล
- JavaScript Memory Leak Detectorดีบักหน่วยความจำรั่วในโค้ด
เคล็ดลับการใช้งาน
- ใช้เคอร์เนลHANDLEและตัวชี้อัจฉริยะอื่นๆ สำหรับ ทรัพยากร Win32และการจัดสรรฮีป
- รับ(Get)คลาสสำหรับการจัดการทรัพยากรอัตโนมัติสำหรับการจัดสรรเคอร์เนลจากไลบรารีATL มาตรฐาน C++ มีauto_ptrสำหรับการจัดสรรฮีป
- ห่อหุ้มพอยน์เตอร์อินเทอร์เฟซ COM(Encapsulate COM)ภายใน "ตัวชี้อัจฉริยะ" โดยใช้_com_ptr_tหรือ_bstr_tหรือ_variant_t
- ตรวจสอบ(Monitor)รหัส.NETสำหรับการใช้หน่วยความจำที่ผิดปกติ
- หลีกเลี่ยง(Avoid)เส้นทางทางออกหลายทางสำหรับฟังก์ชันเพื่อให้การจัดสรรเป็นอิสระจากตัวแปรในบล็อกส่วนใหญ่เมื่อสิ้นสุดฟังก์ชัน
- ใช้(Use)ข้อยกเว้นดั้งเดิมหลังจากปล่อยการจัดสรรทั้งหมดในบล็อก_finally ให้ว่างเท่านั้น (_finally)ล้อม(Wrap)กองทั้งหมดและจัดการการจัดสรรลงในตัวชี้อัจฉริยะเพื่อใช้ข้อยกเว้น C++
- เรียกใช้ ฟังก์ชัน PropVariantClear ทุกครั้ง(PropVariantClear)ก่อนที่จะเริ่มต้นใหม่หรือยกเลิกอ็อบเจ็กต์PROPVARIANT
แก้ไขปัญหา(Troubleshoot)หน่วยความจำรั่วในWindows
เช่นเดียวกับวิธีต่างๆ ในการป้องกันหน่วยความจำรั่ว มีหลายวิธีในการหยุดการรั่วไหลของหน่วยความจำ แต่ก่อนที่คุณจะเริ่ม อย่าลืมสร้างจุดคืนค่าระบบก่อน
1] ปิดกระบวนการและเริ่มต้นใหม่
หากคุณเห็นว่ากระบวนการที่ไม่จำเป็นใช้ RAM(RAM)มากเกินไปคุณสามารถสิ้นสุดกระบวนการในตัวจัดการ(Task Manager)งาน คุณจะต้องรีสตาร์ทอุปกรณ์เพื่อให้พื้นที่ว่างพร้อมใช้งานโดยกระบวนการอื่น หากไม่มี ปัญหาการรั่วไหลของหน่วยความจำ รีสตาร์ท(Restart)จะไม่ได้รับการแก้ไข กระบวนการหนึ่งที่มีข้อบกพร่องในการทำให้พีซี ช้าลงคือRuntime Broker ลองใช้ดูว่าการปิดใช้งานเพียงอย่างเดียวนั้นได้ผลหรือไม่
2] เครื่องมือวินิจฉัยหน่วยความจำ
ในการเข้าถึงเครื่องมือวินิจฉัยหน่วยความจำ(Memory Diagnostic Tool) ภายใน สำหรับ Windows:
- บันทึกงานสำคัญทั้งหมดของคุณ
- กดWin + Rเพื่อเปิดหน้าต่างRun
- พิมพ์คำสั่งmdsched.exeในหน้าต่างRun
- รีสตาร์ทพีซี
- หลังจากรีสตาร์ทแล้ว ให้สแกนขั้นพื้นฐานหรือไปที่ ตัวเลือก ' ขั้นสูง(Advanced) ' เช่น ' ทดสอบผสม(Test mix) ' หรือ ' จำนวนผ่าน(Pass count) '
- กดF10เพื่อเริ่มการทดสอบ
สิ่งเหล่านี้ยังคงเป็นการแก้ไขชั่วคราว
3] ตรวจสอบการอัปเดตไดรเวอร์
ไดรเวอร์ที่ล้าสมัยทำให้เกิดการรั่วไหลของหน่วยความจำ อัพเดทไดรเวอร์ทั้งหมด :
- กดWin + Rแล้วเปิดหน้าต่างRun พิมพ์devmgmt.mscแล้วกดEnter จะพาคุณไปที่Device Manager(Device Manager)
- ตรวจสอบ(Check)ไดรเวอร์ที่ล้าสมัยและอัปเดตทั้งหมด
- สำหรับการอัปเดตที่คุณอาจพลาดไป ให้ตรวจสอบในWindows Update(Windows Update)
นี้เป็นเรื่องง่าย
4] เพิ่มประสิทธิภาพการทำงาน
การปรับ Windows สำหรับประสิทธิภาพจะจัดการทุกอย่างรวมถึงการจัดกำหนดการโปรเซสเซอร์และการใช้หน่วยความจำเพื่อหยุดการรั่วไหลของหน่วยความจำ ทำตามขั้นตอนเหล่านี้:
- คลิกขวาที่ ' พีซีเครื่องนี้(This PC) ' และเลือก การตั้งค่า ' ขั้นสูง(Advanced) ' ในบานหน้าต่างด้านซ้าย
- ภายใต้ แท็บ ' ขั้นสูง(Advanced) ' ไปที่ ' ประสิทธิภาพ(Performance) ' ตามด้วย ' การตั้งค่า(Settings) '
- ทำเครื่องหมายที่ ' ปรับเพื่อประสิทธิภาพที่ดีที่สุด(Adjust for best performance) ' แล้วคลิกตกลง(OK)
- รีสตาร์ท(Restart)และตรวจสอบว่าปัญหาได้รับการแก้ไขแล้วหรือไม่
หากวิธีแก้ปัญหาง่ายๆ นี้ไม่ได้ผล ให้ลองวิธีแก้ไขปัญหาถัดไป
5] ปิด การใช้งาน โปรแกรม(Programs)ที่ทำงานบนStartup
การปิดใช้งานโปรแกรมที่มีปัญหาเป็นวิธีเดียวที่จะกำจัดปัญหาหน่วยความจำรั่ว ไปที่Task Managerและปิดการใช้งานโปรแกรมสร้างปัญหา หากคุณไม่ทราบว่าโปรแกรมใดสร้างปัญหา ให้ทำดังนี้
- ไปที่ ' ตัวจัดการงาน(Task Manager) '
- ไปที่ ' เริ่มต้น(Startup) '
- ปิดใช้งานโปรแกรมเริ่มต้นที่(Disable the startup programs)คุณไม่จำเป็นต้องเรียกใช้โดยค่าเริ่มต้น
6] Defrag ฮาร์ดไดรฟ์
แม้ว่าWindows 10จะทำสิ่งนี้ให้คุณโดยอัตโนมัติ แต่คุณอาจต้องทำการDefrag ฮาร์ดไดรฟ์เป็นครั้งคราวเพื่อเพิ่มประสิทธิภาพ:
- ไปที่ ' พีซีเครื่องนี้(This PC) ' หรือ ' คอมพิวเตอร์ของฉัน(My Computer) '
- คลิกขวา(Right-Click)ที่ฮาร์ดไดรฟ์ระบบ (โดยปกติคือไดรฟ์ C:)
- ไปที่ ' เครื่องมือ(Tools) ' ใต้ ' คุณสมบัติ(Properties) ' และเลือก ' เพิ่มประสิทธิภาพ(Optimize) '
- เลือกไดรฟ์ที่จะ Defrag และเลือก ' วิเคราะห์(Analyze) '
รีสตาร์ทคอมพิวเตอร์หลังจากการแตกแฟรกเมนต์ใหม่
7] ไฟล์ ClearPage เมื่อปิดเครื่อง
ตอนนี้มันซับซ้อนขึ้น แต่อย่ากังวล ต่อไปนี้เป็นวิธีล้างไฟล์เพจเมื่อปิดเครื่องทุกครั้ง(clear the Page File at every shutdown) :
- พิมพ์regeditในSearchเพื่อเรียกใช้Registry Editor(Registry Editor)
- เข้าสู่เส้นทางนี้:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- เปลี่ยนค่าของClearPageFileAtShutDown เป็น '1'( ClearPageFileAtShutDown to ‘1’.)
- บันทึกการเปลี่ยนแปลงและรีสตาร์ท(Restart)อุปกรณ์
นี้ควรจะทำ อย่าลืมว่ากระบวนการปิดระบบจะใช้เวลาเพิ่มขึ้นเล็กน้อย
9] ปิดการใช้งาน Superfetch
บริการ Windows(Windows Service)นี้ปรับประสิทธิภาพการทำงานให้เหมาะสมโดยลดเวลาในการบู๊ต ช่วยให้Windowsจัดการการใช้RAM ชีวิต(Life)หลังปิดใช้งานSuperfetchไม่สะดวก แต่ทำถ้าคุณต้องการ อย่างน้อยก็ลองทำสิ่งนี้คนเดียวเพื่อแยกปัญหาออก:
- ค้นหาservices.mscและไปที่ Services Manager
- มองหา ' Superfetch ' และคลิกขวาเพื่อไปที่ ' Properties '
- เลือก ' หยุด(Stop) '
- ' ปิดใช้งาน(Disable) ' บริการจากเมนูแบบเลื่อนลงด้วย
- รีสตาร์ทพีซีและตรวจสอบว่าประสิทธิภาพดีขึ้นหรือไม่
เปิดใช้งาน Superfetch หากวิธีนี้ใช้ไม่ได้ผล
10] ตรวจสอบมัลแวร์
ใช้ซอฟต์แวร์ป้องกันไวรัสของบริษัทอื่นหรือWindows Defender ของ Windows 10 เพื่อสแกนและกำจัดมัลแวร์ ตรวจสอบ ให้(Make)แน่ใจว่าโปรแกรมป้องกันไวรัสได้รับการอัปเดตเพื่อรองรับระบบปฏิบัติการของคุณ เพื่อไม่ให้กลายเป็นสาเหตุของหน่วยความจำรั่ว
ทุกโซลูชันที่คุณอาจจำเป็นต้องค้นหาหรือป้องกันการรั่วไหลของหน่วยความจำอยู่ที่นี่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการรั่วไหลของหน่วยความจำในMSDNและMicrosoft
Related posts
วิธีการเปิดและอ่านไฟล์ Small Memory Dump (DMP) ใน Windows 10
วิธีการใช้งาน Windows Memory Diagnostics Tool ใน Windows 11/10
วิธีเพิ่ม Page File size หรือหน่วยความจำเสมือนใน Windows 10
วิธีการสร้าง Crash Dump file ด้วยตนเองใน Windows 10
Explorer.exe High Memory or CPU usage ใน Windows 10
วิธีการสำรองข้อมูล Move หรือ Delete PageFile.sys เมื่อปิดเครื่องใน Windows 10
การตั้งค่าการซิงค์ Windows 10 ไม่ทำงาน Greyed Out
วิธีใช้ Alarms and Clocks app ของ Windows 10
วิธีการแก้ไข 100% Disk, High CPU, High Memory usage ใน Windows 10
อุปกรณ์ HDMI playback ไม่แสดงใน Windows 10
วิธีการเพิ่ม Group Policy Editor เพื่อ Windows 10 Home Edition
Fix Bluetooth ความล่าช้าเสียงใน Windows 10
วิธีทำแผนที่ Network Drive หรือเพิ่ม FTP Drive ใน Windows 11/10
Fix Microsoft Edge High Memory Usage ใน Windows 10
วิธีการเปลี่ยนค่าเริ่มต้น Webcam ในคอมพิวเตอร์ Windows 10
วิธีสร้าง Radar Chart ใน Windows 11/10
Best ฟรี ISO Mounter software สำหรับ Windows 10
Fix WerMgr.exe or WerFault.exe Application Error ใน Windows 11/10
Adjust ของคุณ Monitor สำหรับดีกว่า screen resolution ใน Windows 10
เปิดใช้งาน Network Connections ในขณะที่อยู่ใน Modern Standby บน Windows 10