win11記憶體外洩如何解決 win11記憶體外洩原因分析與多種解決辦法

PHPz
發布: 2024-02-29 09:58:50
轉載
615 人瀏覽過

php小編小新為您解析win11記憶體外洩問題。記憶體外洩可能由多種原因引起,如程式bug、資源未釋放等。解決辦法包括更新系統修補程式、關閉可能導致記憶體外洩的程式、使用記憶體管理工具等。透過分析原因並採取有效措施,可有效解決win11記憶體外洩問題,提升系統效能與穩定性。

記憶體外洩的原因:

記憶體洩漏是因為錯誤的記憶體分配導致電腦程式中的資源錯位。當未使用的RAM位置仍未釋放時,就會發生這種情況。不要將記憶體洩漏與空間洩漏或記憶體使用率高相混淆,後者指的是程式使用的 RAM 超出了需求。據稱,Windows 11/10/8/7 系統上的記憶體洩漏發生在記憶體未被使用但無法存取時。

為什麼記憶體洩漏不好:

記憶體洩漏很糟糕,因為它是一個錯誤,是作業系統或軟體中的一個缺陷。但讓我們看看它究竟是如何影響系統的:

  • 由於即使不使用記憶體也不會釋放,因此會導致記憶體耗盡。
  • 記憶體耗盡導致軟體老化。
  • 可用記憶體減少會導致回應時間增加和系統效能下降。
  • 未經檢查的記憶體洩漏最終可能導致應用程式崩潰。

為了辨識記憶體洩漏,程式設計師需要存取程式的原始碼。

如何定位記憶體洩漏

要解決一個問題,我們需要先辨識它。定位記憶體洩漏的基本步驟是:

  • Affirmation : 確定是否發生洩漏。
  • 尋找核心模式記憶體洩漏:定位由核心模式驅動程式元件所造成的洩漏。
  • 尋找使用者模式記憶體洩漏:定位由使用者模式驅動程式或應用程式造成的洩漏。

記憶體分配是如何發生的

應用程式分配 RAM 有不同的模式。如果空間在使用後沒有釋放,無論分配模式如何,都會發生記憶體洩漏。一些常見的分配模式是:

  • HealAlloc 函數用於堆疊記憶體分配。 C/C 運行時等效項是 malloc 和 new。
  • 用於從作業系統直接指派的 VirtualAlloc 函數。
  • 用於保存應用程式核心記憶體的 Kernel32 API。例如,CreateFile、CreateThread。
  • User32 API 和 Gdi32 API。

如何防止 Windows 中的記憶體洩漏

我們都知道預防勝於治療,因此監控您的系統非常重要。

您需要注意各個程式和應用程式是否異常使用 RAM。您可以按CTRL SHIFT ESC前往 Windows 工作管理員,並新增句柄、使用者物件、GDI 物件等欄位。

這將有助於您輕鬆監控資源使用情況。

Microsoft 診斷記憶體洩漏的工具

各種工具診斷各種分配模式的記憶體洩漏:

  • Application Verifier 診斷器洩漏。
  • UMDH(Windows 偵錯工具的一個元件)透過監視堆記憶體分配來分析單一進程的洩漏。
  • Trace Capture 用於全面分析 RAM 使用情況。
  • Xperf 也追蹤堆分配模式。
  • CRT Debug Heap 不僅追蹤堆分配,還啟用編碼實踐以最大限度地減少洩漏。
  • JavaScript Memory Leak Detector 偵錯程式碼中的記憶體洩漏。

使用技巧

  • 使用核心HANDLE和其他智慧指標進行 Win32 資源和堆分配。
  • 從 ATL 庫取得用於核心分配的自動資源管理類別。 C 標準具有用於堆分配的auto_ptr 。
  • 使用_com_ptr_t或_bstr_t或_variant_t將 COM 介面指標封裝在「智慧型指標」中。
  • 監視 .NET 程式碼的例外記憶體使用量。
  • 避免函數的多個退出路徑,以便在函數結束時讓分配從大多數區塊中的變數中釋放出來。
  • 僅在釋放 _finally 區塊中的所有分配後才使用本機異常。將所有堆和句柄分配包裝到智慧指標中,以便使用 C 異常。
  • 在重新初始化或丟棄 PROPVARIANT 物件之前,始終呼叫PropVariantClear函數。

如何修復 Windows 11/10 中的記憶體洩漏

就像防止記憶體洩漏的各種方法一樣,阻止記憶體洩漏的方法也是多種多樣的。但在開始之前,記得先建立一個系統還原點。

1]關閉進程並重新啟動

如果您看到不必要的進程佔用過多 RAM,您可以在任務管理器中結束該進程。您將需要重新啟動設備,以便釋放的空間可供其他進程使用。沒有重新啟動記憶體洩漏問題將無法解決。 Runtime Broker 是一種已知會降低 PC 速度的進程。看看單獨禁用那個是否有效。

2]記憶體診斷工具

要存取適用於 Windows 的內建記憶體診斷工具:

  • 保存所有重要工作。
  • 按Win R開啟「執行」視窗。
  • 在「執行」視窗中鍵入指令mdsched.exe。
  • 重新啟動電腦。
  • 重新啟動後,執行基本掃描或選擇「進階」選項,如「測試組合」或「通過計數」。
  • 按F10開始測試。

這些仍然是臨時修復。

3]檢查驅動程式更新

過時的驅動程式會導致記憶體洩漏。保持所有驅動程式更新。請依照下列方法之一更新您的裝置驅動程式:

  • 您可以透過Windows 選用更新檢查驅動程式更新以更新您的驅動程式
  • 您可以存取製造商的網站下載驅動程式。
  • 使用免費的驅動更新軟體
  • 如果您的電腦上已有 INF 驅動程式文件,則:
    • 開啟裝置管理員。
    • 按一下驅動程式類別以展開功能表。
    • 然後選擇相關的驅動程式並右鍵單擊它。
    • 選擇更新驅動程式。
    • 依照螢幕上的精靈完成音訊驅動程式的更新。

更新您的作業系統和已安裝的程式以及 Microsoft Store 應用程式也可能有所幫助。

4]最佳化效能

調整 Windows 的效能將管理一切,包括處理器調度和記憶體使用,以阻止記憶體洩漏。按下這些順序:

  • 右鍵單擊“此電腦”,然後在左側窗格中選擇“進階”設定。
  • 在“進階”選項卡下,轉到“效能”,然後是“設定”。
  • 勾選「調整以獲得最佳效能」並按一下「確定」。
  • 重新啟動並檢查問題是否已解決。

如果這個簡單的解決方案不起作用,請嘗試下一個解決方案。

5]停用啟動時執行的程式

禁用麻煩的程式是擺脫記憶體洩漏問題的唯一方法。轉到任務管理器並停用製造麻煩的程式。如果您不知道是哪些程式造成了問題,請執行下列操作:

  • 前往「工作管理員」。
  • 轉到「啟動」。
  • 停用預設不需要執行的啟動程式。

6] 對硬碟進行碎片整理

#雖然Windows 11/10 會自動為您執行此操作,但您可能需要偶爾對硬碟進行碎片整理以優化效能:

  • 前往「這台電腦」或「我的電腦」。
  • 右鍵點選系統硬碟(通常是 C: 磁碟機)。
  • 前往“屬性”下的“工具”,然後選擇“最佳化”。
  • 選擇要進行碎片整理的磁碟機並選擇「分析」。

新碎片後重新啟動電腦。

7] 關閉時清除頁面檔案

它現在變得越來越複雜——但別擔心。以下是每次關機時清除頁面檔案的方法:

  • 在搜尋中鍵入regedit以啟動登錄編輯程式。
  • 輸入此路徑:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager内存管理
登入後複製
  • 將 ClearPageFileAtShutDown的值變更為「1」。
  • 儲存變更並重新啟動裝置。

應該要這樣做。請記住,您的關機過程將花費更多時間。

9]停用超級取得

此 Windows 服務透過最小化啟動時間來最佳化效能。它讓 Windows 管理 RAM 使用。停用Superfetch後的生活並不方便,但如果必須的話,請這樣做。至少單獨嘗試這個來隔離問題:

  • 搜尋services.msc並轉到服務管理員。
  • 尋找“Superfetch”並右鍵單擊它以轉到“屬性”。
  • 選擇「停止」。
  • 也可以從下拉式選單中「停用」該服務。
  • 重新啟動 PC 並檢查效能是否有改善。

如果這不起作用,請啟用 Superfetch。

10] 檢查惡意軟體

使用第三方防毒軟體或 Windows 內建的 Microsoft Defender 掃描並清除惡意軟體。確保更新防毒軟體以支援您的作業系統,以免它成為記憶體洩漏的原因。

11] 修改設定

1、點擊左下角任務欄中的“開始”,在上方搜尋框中輸入“控制面板”開啟。

win11内存泄露如何解决 win11内存泄露原因分析和多种解决办法

2、進入新介面後,將右上角的“檢視方式”切換為“大圖示”,接著點擊其中的“電源選項”。

win11内存泄露如何解决 win11内存泄露原因分析和多种解决办法

3、隨後點選左側欄中的「選擇電源按鈕的功能」。

win11内存泄露如何解决 win11内存泄露原因分析和多种解决办法

4、然後點擊上方中的「更改目前不可用的設定」。

win11内存泄露如何解决 win11内存泄露原因分析和多种解决办法

5、最後找到“啟用快速啟動”,將其小方框取消勾選,並點擊儲存修改即可。

win11内存泄露如何解决 win11内存泄露原因分析和多种解决办法

12] 修改設定

1、也可能是顯示卡驅動程式導致的記憶體外洩。

2、可以在Intel官網中選擇舊版的驅動下載安裝即可。

以上是win11記憶體外洩如何解決 win11記憶體外洩原因分析與多種解決辦法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:jb51.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!