Aメモリリークが故障したメモリ割り当てのために、コンピュータプログラムにおけるリソースの配置ミスです。使用されていないRAMの場所が解放されていない場合に発生します。メモリリークは、必要以上にRAMを使用するプログラムを指すスペースリークと混同しないでください。Windows 10/8/7システムでのメモリリークは、使用されていないにもかかわらずメモリにアクセスできないときに発生したと言われています。
Windows10でのメモリリーク
始める前に、メモリリークはデバッグするソフトウェアの問題であることを知っておく必要があります。たとえば、Java、JavaScript、C / C ++、Windowsなどです。RAMやハードディスクを物理的に交換する必要はありません。
なぜ悪いのですか
これはバグであり、システムの欠陥であるため、メモリリークが悪いことは明らかです。しかし、それがシステムにどのように影響するかを正確に調べてみましょう。
- 使用していないときでもメモリが解放されないため、メモリが枯渇します。
- メモリが使い果たされると、ソフトウェアが古くなります。
- 使用可能なメモリが減少すると、応答時間が長くなり、システムのパフォーマンスが低下します。
- チェックされていないメモリリークは、最終的にアプリケーションのクラッシュにつながる可能性があります。
メモリリークを特定するには、プログラマはプログラムのソースコードにアクセスできる必要があります。
漏れの場所を特定する
問題を解決するには、まず問題を特定する必要があります。メモリリークを見つけるための基本的な手順は次のとおりです。
- 確認:リークが発生したかどうかを判断します。
- カーネルモードのメモリリークの検出:カーネルモードドライバーコンポーネントによって引き起こされたリークの検出。
- ユーザーモードのメモリリークの検出:ユーザーモードのドライバーまたはアプリによって引き起こされたリークの検出。
メモリ割り当て
アプリケーションがRAMを割り当てるさまざまなモードがあります。使用後にスペースが解放されない場合、割り当てモードに関係なく、メモリリークが発生します。一般的な割り当てパターンは次のとおりです。
- ヒープメモリ割り当てのためのHealAlloc関数。C / C ++ランタイムに相当するものは、mallocとnewです。
- OSから直接割り当てるためのVirtualAlloc関数。
- アプリのカーネルメモリを保持するKernel32API。例、CreateFile、CreateThread。
- User32APIとGdi32API。
メモリリークの防止
予防は治療よりも優れていることは誰もが知っているので、メモリリークを防ぐいくつかの方法があります。
モニタリングの習慣
個々のプログラムやアプリケーションによる異常なRAM使用量に注意する必要があります。Ctrl + Shift + Escを押してWindowsタスクマネージャーに移動し、ハンドル、ユーザーオブジェクト、GDIオブジェクトなどの列を追加できます。
これにより、リソースの使用状況を簡単に監視できます。
メモリリークを診断するためのMicrosoftツール
さまざまなツールが、さまざまな割り当てモードのメモリリークを診断します。
- Application Verifierは、ヒープリークを診断します。
- UMDH(Windows Debugging Toolsのコンポーネント)は、ヒープメモリの割り当てを監視することにより、個々のプロセスのリークを診断します。
- RAM使用量を徹底的に分析するためのトレースキャプチャ。
- Xperfもヒープ割り当てパターンを追跡します。
- CRT Debug Heapは、ヒープの割り当てを追跡するだけでなく、コーディング手法を有効にしてリークを最小限に抑えます。
- JavaScriptメモリリークディテクタは、コード内のメモリリークをデバッグします。
使用上のヒント
- Win32リソースとヒープ割り当てには、カーネルHANDLEやその他のスマートポインタを使用します。
- ATLライブラリからカーネル割り当ての自動リソース管理用のクラスを取得します。C ++標準には、ヒープ割り当て用のauto_ptrがあります。
- _com_ptr_tまたは_bstr_tまたは_variant_tを使用して、COMインターフェイスポインターを「スマートポインター」内にカプセル化します。
- .NETコードで異常なメモリ使用量を監視します。
- 関数の複数の出口パスを避けて、関数の終わりまでにほとんどのブロックの変数から割り当てを解放できるようにします。
- ネイティブ例外は、_finallyブロック内のすべての割り当てを解放した後にのみ使用してください。C ++例外を使用するために、すべてのヒープとハンドルの割り当てをスマートポインターにラップします。
- PROPVARIANTオブジェクトを再初期化または破棄する前に、必ずPropVariantClear関数を呼び出してください。
Windowsでのメモリリークのトラブルシューティング
メモリリークを防ぐさまざまな方法と同様に、メモリリークを防ぐさまざまな方法があります。ただし、始める前に、まずシステムの復元ポイントを作成することを忘れないでください。
1]プロセスを閉じて再起動します。
不要なプロセスがRAMを大量に消費している場合は、タスクマネージャーでプロセスを終了できます。解放されたスペースを他のプロセスで使用できるようにするには、デバイスを再起動する必要があります。再起動がないと、メモリリークの問題は解決されません。PCの速度を低下させるバグがある特定のプロセスの1つは、RuntimeBrokerです。それを無効にするだけでうまくいくか試してみてください。
2]メモリ診断ツール
Windows用の内蔵メモリ診断ツールにアクセスするには:
- 重要な作業をすべて保存します。
- 押して勝利+ R開くために実行ウィンドウを。
- [実行]ウィンドウにコマンドmdsched.exeを入力します。
- PCを再起動します。
- 再起動後、基本スキャンを実行するか、「テストミックス」や「パスカウント」などの「詳細」オプションを選択します。
- F10を押してテストを開始します。
これらはまだ一時的な修正です。
3]ドライバーの更新を確認します
古いドライバはメモリリークを引き起こします。すべてのドライバーを最新の状態に保ちます。
- 押して勝利+ Rとは開いて実行ウィンドウを。タイプdevmgmt.mscと入力し、Enterキーを押します。それはに行くことができますデバイスマネージャー。
- 古いドライバーを確認し、すべて更新します。
- 見逃した可能性のある更新プログラムについては、WindowsUpdateを確認してください。
これは簡単でした。
4]パフォーマンスを最適化する
Windowsのパフォーマンスを調整すると、プロセッサのスケジューリングやメモリ使用量などすべてが管理され、メモリリークが防止されます。次の手順を実行します:
- 「このPC」を右クリックし、左側のペインで「詳細」設定を選択します。
- 「下にアドバンスト」タブ、「に行くパフォーマンス」に続く「セッティング」。
- [最高のパフォーマンスに調整する]をオンにして、[ OK ]をクリックします。
- 再起動して、問題が解決したかどうかを確認します。
この単純な解決策が機能しなかった場合は、次の解決策を試してください。
5]起動時に実行されているプログラムを無効にする
面倒なプログラムを無効にすることが、メモリリークの問題を取り除く唯一の方法です。タスクマネージャに移動し、トラブルシューティングプログラムを無効にします。どのプログラムが問題を引き起こしているのかわからない場合は、次のようにします。
- 「タスクマネージャ」に移動します。
- 「スタートアップ」に移動します。
- デフォルトで実行する必要のないスタートアッププログラムを無効にします。
6]ハードドライブのデフラグ
Windows 10はこれを自動的に実行しますが、パフォーマンスを最適化するために、ハードドライブをときどきデフラグする必要がある場合があります。
- 「このPC」または「マイコンピュータ」に移動します。
- システムのハードドライブ(通常はC:ドライブ)を右クリックします。
- 「プロパティ」の下の「ツール」に移動し、「最適化」を選択します。
- デフラグするドライブを選択し、「分析」を選択します。
新しい断片化の後でコンピュータを再起動します。
7]シャットダウン時のClearPageファイル
今は複雑になっていますが、心配しないでください。シャットダウンするたびにページファイルをクリアする方法は次のとおりです。
- 入力regeditと、レジストリエディタを起動するために検索に。
- このパスを入力してください:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerメモリ管理
- ClearPageFileAtShutDownの値を「1」に変更します。
- 変更を保存して、デバイスを再起動します。
これはそれをするべきです。シャットダウンプロセスにはもう少し時間がかかることを忘れないでください。
9]スーパーフェッチを無効にする
このWindowsサービスは、起動時間を最小限に抑えることでパフォーマンスを最適化します。これにより、WindowsでRAMの使用量を管理できます。Superfetchを無効にした後の生活は便利ではありませんが、必要に応じて行ってください。少なくともこれを単独で試して、問題を切り分けてください。
- services.mscを検索し、ServicesManagerに移動します。
- 「スーパーフェッチ」を探して右クリックし、「プロパティ」に移動します。
- 「停止」を選択します。
- また、ドロップダウンメニューからサービスを「無効にする」。
- PCを再起動し、パフォーマンスが向上したかどうかを確認します。
これが機能しなかった場合は、スーパーフェッチを有効にします。
10]マルウェアをチェックする
サードパーティのウイルス対策ソフトウェアまたはWindows10の社内WindowsDefenderを使用して、マルウェアをスキャンして排除します。OSをサポートするようにアンチウイルスが更新されていることを確認して、メモリリークの原因にならないようにしてください。
メモリリークを見つけたり防止したりする必要があるかもしれないすべての解決策がここにあります。メモリリークの詳細については、MSDNとMicrosoftを参照してください。