A Rò rỉ bộ nhớ là sự thất lạc tài nguyên trong chương trình máy tính do cấp phát bộ nhớ bị lỗi. Nó xảy ra khi vị trí RAM không được sử dụng vẫn chưa được giải phóng. Không được nhầm lẫn với rò rỉ bộ nhớ với rò rỉ dung lượng, đề cập đến một chương trình sử dụng nhiều RAM hơn mức cần thiết. Rò rỉ bộ nhớ trên hệ thống Windows 11/10/8/7 được cho là đã xảy ra khi bộ nhớ không thể truy cập được mặc dù không được sử dụng.
Rò rỉ bộ nhớ trong Windows 11/10
Trước khi bắt đầu, bạn nên biết rằng Rò rỉ bộ nhớ là một vấn đề phần mềm cần gỡ lỗi - ví dụ:trong Java, JavaScript, C / C ++, Windows, v.v. Về mặt vật lý, không cần thay thế RAM hoặc đĩa cứng.
Tại sao nó tệ
Rò rỉ bộ nhớ rõ ràng là xấu bởi vì nó là một lỗi, một lỗ hổng trong hệ thống. Nhưng hãy cùng tìm hiểu xem nó ảnh hưởng chính xác đến hệ thống như thế nào:
- Vì bộ nhớ không được giải phóng ngay cả khi không sử dụng nên dẫn đến cạn bộ nhớ.
- Bộ nhớ cạn kiệt dẫn đến lão hóa phần mềm.
- Bộ nhớ khả dụng giảm dẫn đến tăng thời gian phản hồi và hệ thống hoạt động kém.
- Rò rỉ bộ nhớ không được kiểm soát cuối cùng có thể dẫn đến sự cố ứng dụng.
Để xác định rò rỉ bộ nhớ, lập trình viên cần có quyền truy cập vào mã nguồn của chương trình.
Xác định vị trí rò rỉ
Để giải quyết một vấn đề, trước hết chúng ta cần xác định nó. Các bước cơ bản để xác định vị trí rò rỉ bộ nhớ là:
- Khẳng định :Xác định xem có bị rò rỉ hay không.
- Phát hiện rò rỉ bộ nhớ ở chế độ hạt nhân :Xác định vị trí rò rỉ do thành phần trình điều khiển chế độ hạt nhân gây ra.
- Tìm rò rỉ bộ nhớ ở Chế độ người dùng :Xác định vị trí rò rỉ do ứng dụng hoặc trình điều khiển ở chế độ người dùng.
Phân bổ bộ nhớ
Có các chế độ khác nhau trong đó các ứng dụng phân bổ RAM. Nếu không gian không được giải phóng sau khi sử dụng, rò rỉ bộ nhớ sẽ xảy ra bất kể chế độ cấp phát. Một số mẫu phân bổ phổ biến là:
- Hàm HealAlloc để cấp phát bộ nhớ heap. Thời gian chạy C / C ++ tương đương là sai và mới.
- Chức năng VirtualAlloc để phân bổ trực tiếp từ OS.
- Các API Kernel32 để giữ bộ nhớ nhân cho ứng dụng. Ví dụ, CreateFile, CreateThread.
- API User32 và API Gdi32.
Ngăn chặn rò rỉ bộ nhớ trong Windows
Tất cả chúng ta đều biết phòng bệnh hơn chữa bệnh, vì vậy đây là một số cách để ngăn ngừa rò rỉ bộ nhớ.
Theo dõi thói quen
Bạn cần chú ý đến việc sử dụng RAM bất thường của các chương trình và ứng dụng riêng lẻ. Bạn có thể đi tới Trình quản lý tác vụ của Windows bằng cách nhấn CTRL + SHIFT + ESC và thêm các cột như Xử lý, Đối tượng Người dùng, Đối tượng GDI, v.v.
Điều này sẽ giúp bạn dễ dàng theo dõi việc sử dụng tài nguyên.
Đọc :Các loại bộ nhớ trong máy tính là gì?
Các công cụ của Microsoft để chẩn đoán rò rỉ bộ nhớ
Các công cụ khác nhau chẩn đoán rò rỉ bộ nhớ cho các chế độ cấp phát khác nhau:
- Trình xác minh ứng dụng chẩn đoán rò rỉ đống.
- UMDH (một thành phần của Công cụ gỡ lỗi Windows) chẩn đoán rò rỉ cho các quy trình riêng lẻ bằng cách giám sát phân bổ bộ nhớ heap.
- Ghi lại dấu vết để phân tích kỹ lưỡng việc sử dụng RAM.
- Xperf cũng theo dõi các mẫu phân bổ heap.
- CRT Debug Heap không chỉ theo dõi phân bổ heap mà còn cho phép thực hành mã hóa để giảm thiểu rò rỉ.
- JavaScript Memory Leak Detector gỡ lỗi bộ nhớ bị rò rỉ trong mã.
Mẹo sử dụng
- Sử dụng hạt nhân HANDLE s và các con trỏ thông minh khác cho tài nguyên Win32 và phân bổ heap.
- Nhận các lớp để quản lý tài nguyên tự động cho việc cấp phát hạt nhân từ thư viện ATL. Tiêu chuẩn C ++ có auto_ptr để phân bổ đống.
- Đóng gói các con trỏ giao diện COM trong “con trỏ thông minh” với sự trợ giúp của _com_ptr_t hoặc _bstr_t hoặc _variant_t .
- Theo dõi mã .NET để sử dụng bộ nhớ bất thường.
- Tránh nhiều đường thoát cho các hàm để giải phóng phân bổ khỏi các biến trong hầu hết các khối khi kết thúc một hàm.
- Chỉ sử dụng các ngoại lệ gốc sau khi giải phóng tất cả các phân bổ trong khối _finally. Gói tất cả phân bổ heap và xử lý vào con trỏ thông minh để sử dụng các ngoại lệ C ++.
- Luôn gọi PropVariantClear hoạt động trước khi khởi động lại hoặc loại bỏ đối tượng PROPVARIANT.
Khắc phục sự cố rò rỉ bộ nhớ trong Windows
Cũng giống như các cách khác nhau để ngăn chặn rò rỉ bộ nhớ, có nhiều cách khác nhau để ngăn chặn rò rỉ bộ nhớ. Nhưng trước khi bắt đầu, hãy nhớ tạo điểm khôi phục hệ thống trước.
1] Đóng các quy trình và khởi động lại.
Nếu bạn thấy một quy trình không cần thiết đang chiếm quá nhiều RAM, bạn có thể kết thúc quy trình trong Trình quản lý tác vụ. Bạn sẽ cần khởi động lại thiết bị để không gian giải phóng có sẵn để sử dụng cho các quy trình khác. Nếu không có sự cố rò rỉ bộ nhớ Khởi động lại sẽ không được giải quyết. Một quy trình cụ thể có lỗi làm chậm PC là Runtime Broker. Hãy thử nếu chỉ tắt tính năng đó hoạt động.
2] Công cụ chẩn đoán bộ nhớ
Để truy cập Công cụ chẩn đoán bộ nhớ có sẵn dành cho Windows:
- Lưu tất cả công việc quan trọng của bạn.
- Nhấn Win + R để mở Chạy cửa sổ.
- Nhập lệnh mdsched.exe trong Run cửa sổ.
- Khởi động lại PC.
- Sau khi khởi động lại, hãy thực hiện quét cơ bản hoặc chuyển sang phần ‘ Nâng cao Các tùy chọn 'như' Kết hợp thử nghiệm ’Hoặc‘ Số lần vượt qua '.
- Nhấn F10 để bắt đầu thử nghiệm.
Đây vẫn là các bản sửa lỗi tạm thời.
3] Kiểm tra các bản cập nhật trình điều khiển
Trình điều khiển lỗi thời gây rò rỉ bộ nhớ. Luôn cập nhật tất cả các trình điều khiển:
- Nhấn Win + R và mở Chạy cửa sổ. Nhập devmgmt.msc và nhấn Enter. Nó sẽ đưa bạn đến Trình quản lý thiết bị .
- Kiểm tra các trình điều khiển đã lỗi thời và cập nhật tất cả.
- Để biết các bản cập nhật, bạn có thể đã bỏ lỡ, hãy kiểm tra Windows Update.
Điều này thật đơn giản.
4] Tối ưu hóa hiệu suất
Việc điều chỉnh Windows cho hiệu suất sẽ quản lý mọi thứ bao gồm lập lịch bộ xử lý và sử dụng bộ nhớ để ngăn chặn rò rỉ bộ nhớ. Làm theo các bước sau:
- Nhấp chuột phải vào ‘ PC này 'Và chọn' Nâng cao 'Cài đặt trên ngăn bên trái.
- Trong phần ‘ Nâng cao ', Chuyển đến' Hiệu suất ', Tiếp theo là' Cài đặt '.
- Chọn ‘ Điều chỉnh để có hiệu suất tốt nhất 'Và nhấp vào OK .
- Khởi động lại và kiểm tra xem sự cố đã được giải quyết chưa.
Nếu giải pháp đơn giản này không hoạt động, hãy thử giải pháp tiếp theo.
5] Tắt các chương trình đang chạy khi khởi động
Vô hiệu hóa các chương trình rắc rối là cách duy nhất để giải quyết vấn đề rò rỉ bộ nhớ. Đi tới Trình quản lý tác vụ và tắt chương trình xử lý sự cố. Nếu bạn không biết chương trình nào đang gây ra sự cố, hãy làm như sau:
- Đi tới ‘ Trình quản lý Tác vụ '.
- Đi tới ‘ Khởi động '.
- Tắt các chương trình khởi động mà bạn không cần chạy theo mặc định.
6] Chống phân mảnh ổ cứng
Mặc dù Windows 10 tự động thực hiện việc này cho bạn, nhưng thỉnh thoảng bạn có thể cần thực hiện chống phân mảnh ổ cứng để tối ưu hóa hiệu suất:
- Đi tới ‘ PC này ’Hoặc‘ Máy tính của tôi '.
- Nhấp chuột phải vào ổ cứng hệ thống (thường là ổ C:\).
- Đi tới ‘ Công cụ ‘Dưới‘ Thuộc tính ‘Và chọn‘ Tối ưu hóa '.
- Chọn ổ đĩa để chống phân mảnh và chọn ‘ Phân tích '.
Khởi động lại máy tính của bạn sau khi phân mảnh mới.
7] Tệp ClearPage khi tắt
Bây giờ nó đang trở nên phức tạp - nhưng đừng lo lắng. Dưới đây là cách xóa Tệp Trang mỗi khi tắt máy:
- Nhập regedit trên Tìm kiếm để khởi chạy Trình chỉnh sửa sổ đăng ký.
- Nhập đường dẫn này:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Thay đổi giá trị của ClearPageFileAtShutDown thành ‘1’.
- Lưu các thay đổi và Khởi động lại thiết bị.
Điều này nên làm điều đó. Hãy nhớ rằng quá trình tắt của bạn sẽ mất nhiều thời gian hơn một chút.
9] Tắt siêu tìm nạp
Dịch vụ Windows này tối ưu hóa hiệu suất bằng cách giảm thiểu thời gian khởi động. Nó cho phép Windows quản lý việc sử dụng RAM. Cuộc sống sau khi vô hiệu hóa Superfetch không thuận tiện nhưng hãy làm điều đó nếu bạn phải. Ít nhất hãy thử điều này một mình để cô lập vấn đề:
- Tìm kiếm services.msc và chuyển đến Trình quản lý dịch vụ.
- Tìm kiếm ‘ Superfetch 'Và nhấp chuột phải vào nó để đi tới ‘ Thuộc tính '.
- Chọn ‘ Dừng '.
- Cũng ‘ Tắt 'Dịch vụ từ menu thả xuống.
- Khởi động lại PC và kiểm tra xem hiệu suất đã được cải thiện chưa.
Bật Superfetch nếu cái này không hoạt động.
10] Kiểm tra phần mềm độc hại
Sử dụng phần mềm chống vi-rút của bên thứ ba hoặc Bộ bảo vệ Windows nội bộ của Windows 10 để quét và loại bỏ phần mềm độc hại. Đảm bảo rằng chương trình chống vi-rút được cập nhật để hỗ trợ hệ điều hành của bạn để nó không trở thành lý do dẫn đến rò rỉ bộ nhớ.
Mọi giải pháp bạn có thể cần để tìm hoặc ngăn chặn rò rỉ bộ nhớ đều có ở đây. Bạn có thể đọc thêm về rò rỉ bộ nhớ trên MSDN và Microsoft.