Windows11/10でのメモリリークの検索と修正

メモリリーク(Memory Leak)は、メモリ割り当ての誤りによるコンピュータプログラムのリソースの置き忘れです。これは、使用されていないRAMの場所が解放されていない場合に発生します。メモリリークは、必要以上にRAM(RAM)を使用するプログラムを指すスペースリークと混同しないでください。Windows 11/10/8/7システムでのメモリリークは、使用されていないにもかかわらずメモリにアクセスできないときに発生したと言われています。

Windows11/10のメモリリーク

始める前に、メモリ(Memory)リークはデバッグするソフトウェアの問題であることを知っておく必要があります。たとえば、JavaJavaScript、C / C ++、Windowsなど(Windows)です。RAM(RAM)やハードディスクを物理的に交換する必要はありません。

Windows10のメモリリーク

なぜ悪いのですか

これはバグであり、システムの欠陥であるため、メモリリークが悪いことは明らかです。しかし、それがシステムにどのように影響するかを正確に調べてみましょう。

  1. 使用していないときでもメモリが解放されないため、メモリが枯渇します。
  2. メモリが使い果たされると、ソフトウェアが古くなります。
  3. 使用可能なメモリが減少すると、応答時間が長くなり、システムのパフォーマンスが低下します。
  4. チェックされていないメモリリークは、最終的にアプリケーションのクラッシュにつながる可能性があります。

メモリリークを特定するには、プログラマはプログラムのソースコードにアクセスできる必要があります。

リークの特定

問題を解決するには、まず問題を特定する必要があります。メモリリークを特定するための基本的な手順は次のとおりです。

  1. 確認(Affirmation):リークが発生したかどうかを判断します。
  2. カーネルモードのメモリリーク(Finding Kernel-mode memory leak)の検出:カーネルモードのドライバコンポーネントによって引き起こされたリークの検出。
  3. ユーザーモードのメモリリーク(Finding User-mode memory leak)の検出:ユーザーモードのドライバーまたはアプリによって引き起こされたリークの検出。

メモリ割り当て

アプリケーションがRAM(RAM)を割り当てるさまざまなモードがあります。使用後にスペースが解放されない場合、割り当てのモードに関係なく、メモリリークが発生します。一般的な割り当てパターンは次のとおりです。

  1. (HealAlloc)ヒープメモリ割り当てのためのHealAlloc関数。C / C ++ランタイムに相当するものは、mallocとnewです。
  2. (VirtualAlloc)OSから直接割り当てるためのVirtualAlloc関数。
  3. (Kernel32 APIs)アプリのカーネルメモリを保持するKernel32API 。(Example)CreateFileCreateThread
  4. User32APIとGdi32API。

Windowsでのメモリリークを防ぐ

予防は治療よりも優れていることは誰もが知っているので、メモリリークを防ぐ方法をいくつか紹介します。

モニタリングの習慣

Windows10のメモリリーク

個々のプログラムやアプリケーションによる異常なRAM使用量に注意する必要があります。CTRL+SHIFT+ESCを押してWindowsタスクマネージャー(Windows Task Manager)に移動し、ハンドル(Handles)ユーザーオブジェクト(User Objects)GDIオブジェクト(GDI Objects)などの列を追加できます。

これにより、リソースの使用状況を簡単に監視できます。

読む(Read)コンピュータのメモリの種類は何ですか?(What are the Types of Memory in a computer?)

メモリリークを診断するためのMicrosoft(Microsoft)ツール

さまざまなツールが、さまざまな割り当てモードのメモリリークを診断します。

  1. Application Verifierは、ヒープリークを診断します。
  2. UMDHWindowsデバッグツール(Windows Debugging Tools)のコンポーネント)は、ヒープメモリの割り当てを監視することにより、個々のプロセスのリークを診断します。
  3. RAM使用量を徹底的に分析するためのトレースキャプチャ(Capture)
  4. Xperfもヒープ割り当てパターンを追跡します。
  5. CRT Debug Heapは、ヒープの割り当てを追跡するだけでなく、コーディング手法によってリークを最小限に抑えることもできます。
  6. JavaScriptメモリリークディテクタ(JavaScript Memory Leak Detector)は、コード内のメモリリークをデバッグします。

使用上のヒント

  1. Win32リソースとヒープ割り当てには、カーネルHANDLEおよびその他のスマートポインタを使用します。
  2. (Get)ATLライブラリからカーネル割り当ての自動リソース管理用のクラスを取得します。C ++標準には、ヒープ割り当て用のauto_ptrがあります。(auto_ptr )
  3. (Encapsulate COM)_com_ptr_tまたは_bstr_tまたは_variant_tを使用して、 (_variant_t)COMインターフェイスポインターを「スマートポインター」内にカプセル化します。
  4. (Monitor).NETコードで異常なメモリ使用量を監視します。
  5. 関数の複数の出口パスを避け(Avoid)て、関数の終わりまでにほとんどのブロックの変数から割り当てを解放できるようにします。
  6. (Use)ネイティブ例外は、_finallyブロック内のすべての割り当てを解放した後にのみ使用してください。C ++例外を使用するために、すべてのヒープをラップし、割り当てをスマートポインターに処理します。(Wrap)
  7. PROPVARIANTオブジェクトを再初期化または破棄する前に、必ずPropVariantClear関数を呼び出してください。

(Troubleshoot)Windowsでのメモリリークのトラブルシューティング

メモリリークを防ぐさまざまな方法と同様に、メモリリークを防ぐさまざまな方法があります。ただし、始める前に、まずシステムの復元ポイントを作成することを忘れないでください。

1]プロセスを閉じて再起動します。

不要なプロセスがRAMを大量に消費していることがわかった場合は、(RAM)タスクマネージャー(Task Manager)でプロセスを終了できます。解放されたスペースを他のプロセスで使用できるようにするには、デバイスを再起動する必要があります。再起動(Restart)しないと、メモリリークの問題は解決されません。PCの速度を低下させるバグがある特定のプロセスの1つは、RuntimeBroker(Runtime) です(Broker)。それを無効にするだけでうまくいくか試してみてください。

2]メモリ診断ツール

Windowsメモリ診断

Windows用の組み込みのメモリ診断ツールにアクセスするには:(Memory Diagnostic Tool)

  1. 重要な作業をすべて保存します。
  2. Win + Rを押して、実行(Run)ウィンドウを開きます。
  3. [実行(Run)]ウィンドウにコマンドmdsched.exeを入力します。
  4. PCを再起動します。
  5. 再起動後、基本スキャンを実行するか、 「テストミックス(Test mix)」や「パスカウント」などの「(Pass count)詳細(Advanced)」オプションを選択します。
  6. F10を押してテストを開始します。

これらはまだ一時的な修正です。

3]ドライバーの更新を確認します

ドライバーソフトウェアの更新

古いドライバはメモリリークを引き起こします。すべてのドライバーを最新の状態に保ちます:

  1. Win + Rを押して、実行(Run)ウィンドウを開きます。devmgmt.mscと入力し、 Enterキー(Enter)(devmgmt.msc)押します。デバイスマネージャ(Device Manager)に移動します。
  2. 古いドライバーを確認(Check)し、それらをすべて更新します。
  3. アップデートについては、見逃している可能性があります。WindowsUpdate(Windows Update)をチェックインしてください。

これは簡単でした。

4]パフォーマンスを最適化する

最高のパフォーマンスになるように調整する

Windowsのパフォーマンスを調整すると、プロセッサのスケジューリングやメモリ使用量を含むすべてが管理され、メモリリークが防止されます。次の手順を実行します:

  1. 「このPC(This PC) 」を右クリックし、左側のペインで「詳細(Advanced)設定」を選択します。
  2. [詳細(Advanced)設定]タブで、[パフォーマンス]、 (Performance)[設定](Settings)の順に移動します。
  3. [最高のパフォーマンスに調整する(Adjust for best performance)]をオンにして、[ OK ]をクリックします。
  4. 再起動(Restart)して、問題が解決したかどうかを確認します。

この単純な解決策が機能しなかった場合は、次の解決策を試してください。

5]起動(Startup)時に実行されているプログラム(Programs)を無効にする

スタートアッププログラム

面倒なプログラムを無効にすることが、メモリリークの問題を取り除く唯一の方法です。タスクマネージャ(Task Manager)に移動し、トラブルシューティングプログラムを無効にします。どのプログラムが問題を引き起こしているのかわからない場合は、次のようにします。

  1. タスクマネージャ(Task Manager)」に移動します。
  2. 「スタートアップ(Startup)」に移動します。
  3. (Disable the startup programs)デフォルトで実行する必要のないスタートアッププログラムを無効にします。

6]ハードドライブのデフラグ

ディスクの最適化

Windows 10はこれを自動的に実行しますが、パフォーマンスを最適化するために、ハードドライブのデフラグを時々行う必要がある場合があります。

  1. このPC(This PC)」または「マイコンピュータ(My Computer)」に移動します。
  2. (Right-Click)システムのハードドライブ(通常はC:ドライブ)を右クリックします。
  3. 「プロパティ(Properties)」の下の「ツール(Tools)」に移動し、 「最適化(Optimize)」を選択します。
  4. デフラグするドライブを選択し、「分析(Analyze)」を選択します。

新しい断片化の後でコンピュータを再起動します。

7]シャットダウン時のClearPageファイル

今は複雑になっていますが、心配しないでください。シャットダウンするたびにページファイル(clear the Page File at every shutdown)をクリアする方法は次のとおりです。

  • 検索(Search)でregeditと入力(regedit)して、レジストリエディタ(Registry Editor)を起動します。
  • 次のパスを入力します。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • ClearPageFileAtShutDown( ClearPageFileAtShutDown to ‘1’.)の値を「1」に変更します。
  • 変更を保存して、デバイスを再起動(Restart)します。

これはそれをするべきです。シャットダウンプロセスにはもう少し時間がかかることを忘れないでください。

9]スーパーフェッチを無効にする

このWindowsサービス(Windows Service)は、起動時間を最小限に抑えることでパフォーマンスを最適化します。これにより、 Windowsで(Windows)RAMの使用量を管理できます。Superfetchを無効にした後の生活(Life)は便利ではありませんが、必要に応じて行ってください。少なくともこれを単独で試して、問題を特定してください。

  1. services.mscを検索し、ServicesManagerに移動します。
  2. 「 Superfetch 」を探して右クリックし、「Properties」に移動します。
  3. 「停止(Stop)」を選択します。
  4. また、ドロップダウンメニューからサービスを「無効にする」。(Disable)
  5. PCを再起動し、パフォーマンスが向上したかどうかを確認します。

これが機能しなかった場合は、スーパーフェッチを有効にします。

10]マルウェアをチェックします

サードパーティのウイルス対策ソフトウェアまたはWindows10の社内WindowsDefenderを使用して、マルウェアをスキャンして排除します。OS(Make)をサポートするようにアンチウイルスが更新されていることを確認して、メモリリークの原因にならないようにします。

メモリリークを見つけたり防止したりする必要があるかもしれないすべての解決策がここにあります。メモリリークの詳細については、MSDNおよびMicrosoftを参照してください。



About the author

私は、Windows 11/10 と Apple の最新の iOS プラットフォームの両方の経験を持つ iPhone と macOS の開発者です。10 年以上の経験があるため、両方のプラットフォームでファイルを作成および管理する方法を深く理解しています。私のスキルは、ファイルを作成するだけではありません。また、Apple 製品、その機能、およびそれらの使用方法についての深い知識も持っています。



Related posts