オブジェクトによってどれだけのメモリが使用されているかを調べるにはどうすればよいですか?どのように多くのコードが使用されているかを知ることは可能ですが、インスタンス化されたオブジェクト(その生涯のいつでも)ではなく、私が望むものです。Pythonのオブジェクトで使用されているメモリの量を確認してください
答えて
pythonオブジェクトのメモリサイズを簡単に見つける方法はありません。あなたが見つけるかもしれない問題の1つは、リストや辞書のようなPythonオブジェクトが他のPythonオブジェクトへの参照を持つかもしれないということです(この場合、あなたのサイズは何ですか?オブジェクト型やガベージコレクションに関連するいくつかのポインタオーバーヘッドと内部構造があります。最後に、いくつかのPythonオブジェクトには、明白でない振る舞いがあります。例えば、リストは、ほとんどの場合、それより多くのオブジェクトのためのスペースを確保します。 dictsはいろいろな方法で動作することができます(少数のキーに対しては異なる実装を持ち、時にはエントリを割り当てすぎることもあります)。
メモリ内のPythonオブジェクトのサイズを最も近似するために、big chunk of code(およびupdated big chunk of code)があります。また、simpler approximationsもあります。しかし、それらは常に近似値になります。
old description about PyObject(事実上すべてのpythonオブジェクトを表す内部構造体)を確認することもできます。
@culix:[Pympler](http://pythonhosted.org/Pympler/)で再び使用されているようですモジュール。 – FriendFX
「より単純な近似」リンクが壊れています - あなたは[このメッセージ](https://mail.python.org/pipermail/python-list/2008-January/510696.html)にリンクしましたか? – Air
あなたのオブジェクトが 'Int - >(Int、Int)'マッピングを持つdictのようにかなりシンプルな場合はどうなりますか?理論的には、そのようなオブジェクトのサイズを計算するのは簡単ですね。 –
は、私は以下のいずれかではない任意の個人的な経験を持っていますが、「Pythonの[メモリ]プロファイラー」利回りのためのシンプルな検索:
PySizer、「Python用のメモリプロファイラは、」見つかりましたhttp://pysizer.8325.org/。しかし、このページはプロジェクトがしばらく更新されていないことを示しているようです...
Heapy、 "Pythonプログラムのメモリ関連の問題に関するデバッグと最適化をサポートしています" http://guppy-pe.sourceforge.net/#Heapy。
希望します。
もう1つのアプローチは、ピクルスを使用することです。この質問の複製にはthis answerを参照してください。
これは非常に賢明で簡単なアプローチです。 –
私は本当にあなたの答えに興味がありますが、あなたの答えが指しているリンクにアクセスすることはできません... –
@YohanObadia私はちょうどリンクを試して、それは働いた...それはもう一つの答えです。 – drevicko
これを試してみてください:
sys.getsizeof(object)
getsizeof()は、オブジェクトの__sizeof__
メソッドを呼び出して、オブジェクトがガベージコレクタによって管理されている場合は、追加のガベージコレクタのオーバーヘッドを追加します。
このsys.getsizeof(オブジェクト)の戻り値には、上記のfserbのポインタのサイズではなく、実際のオブジェクトのサイズが含まれていますか? –
いいえ、ポインタのサイズを返します。 – lstyls
これは誤解を招くかもしれません__sizeof__オブジェクトにオーバーライドするので注意して使用する必要があります。
bregman.suiteを使用すると、sys.getsizeofを使ったいくつかのテストでは、オブジェクトインスタンスの配列オブジェクト(データ)のコピーがオブジェクト自体(mfcc)より大きいものとして出力されます。あなたは多少の粗だが効果的な方法を使用することができ、大きなオブジェクトの場合
>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>
:あなたのPythonのプロセスは、システムに占有しているどのくらいのメモリ チェックし、オブジェクトを削除して比較します。
この方法には多くの欠点がありますが、非常に大きなオブジェクトの見積もりが非常に速くなります。
これは効果がない可能性があります。プロセスで解放されたメモリをオペレーティングシステムに戻す必要はないため、メモリ使用量の減少を正確に予測できない場合があります。 –
オブジェクトが作成される前と、後でPythonプロセスリソースの使用量を測定する同様のアプローチは非常に効果的です。 –
@AntonyHatchkinsはpythonメモリマネージャーではありませんので、必ずしもオペレーティングシステムから新しいメモリを取得するとは限りません。メモリプールは、使用されていなくても割り当てられているので、新しい要求がある場合、オペレーティングシステムからさらに多くのメモリを要求する必要はありません。 つまり、この方法はオブジェクトの作成と破棄の両方で信頼性がありません。 – spider
- 1. ダイナミックリンクライブラリで使用されているメモリの量を確認したい
- 2. Python:使用している関数のバージョンを確認してください
- 3. Pythonでラクダのケースを確認してください
- 4. sitecustomizeでpythonの対話モードを確認してください
- 5. WCFサービスで使用されるInstanceContextModeを確認してください
- 6. Javaのオブジェクトのサブクラスを確認してください
- 7. 共有ホストでasp.netキャッシュで使用されるメモリを確認してください
- 8. プライマリキーとユニークインデックスの使用を確認してください
- 9. 2回要求されたメモリを確認してください
- 10. コアデータにオブジェクトの存在を確認してください
- 11. URLを確認してください
- 12. カスタムRails 3ジェネレータで使用されたコマンドを確認してください
- 13. Pythonで初期化された変数を確認してください
- 14. Python:マルチプロセッシングを使用する場合の処理された要素の数を確認してください。
- 15. インストールされているDirectXのバージョンを確認してください
- 16. ループでチェックされているチェックボックスを確認してください
- 17. ブラウザでサポートされているDRMシステムを確認してください。
- 18. 現在存在するSSH接続の量を確認してください
- 19. ファイルハンドルで使用されているメディアの自然なブロックサイズを確認してください
- 20. DLLが別のアプリケーションで使用されているかどうかを確認してください
- 21. PHPを使用してonbeforeunloadがサポートされていることを確認してください。
- 22. ブートストラップ:MSIのバージョンがインストールされているか確認してください
- 23. WinJS:デバッグモードで実行されているか確認してください
- 24. オブジェクトがリリースされたかどうかを確認してください。
- 25. Qtでキーが押されていないか確認してください
- 26. HTML5ファイルAPIを使用してファイルが変更されていないか確認してください。
- 27. サービスがC言語を使用してインストールされているか確認してください
- 28. ギフトバウチャーコードがオープンカートのオーダーで使用されているか確認してください
- 29. powershellを使用してftpフォルダ内のファイルを確認してください。
- 30. BCryptを使用してLinq-to-SQLのパスワードを確認してください
類似:http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python –
objgraphは面白そうです:http://mg.pov .lt/objgraph/ –
グラフィカルテスト:http://stackoverflow.com/a/30008338/2087463 – tmthydvnprt