プログラムのメモリ フットプリントを制御しようとしています。PyObjC
かなり大きなライブラリから 3 ~ 4 個の関数しか使用していないため、インポートから始めようと思いました。しかし、より大きなモジュールの特定の部分をインポートしても、実際にメモリにロードされたものとはまったく関係がないことに少し驚きました。
メモリ プロファイラーの出力
OSX で Quartz.CoreGraphics ライブラリ全体をロードします。
Line # Mem usage Increment Line Contents
================================================
77 @profile
78 7.953 MB 0.000 MB def test_import_all():
79 26.734 MB 18.781 MB import Quartz.CoreGraphics as CG
ライブラリ全体をほぼ 19MB で取り込みます。
必要なものだけを取り込もうとすると、同じ 19MB の結果が得られます。
Line # Mem usage Increment Line Contents
================================================
82 @profile
83 7.941 MB 0.000 MB def test_import_some():
84 26.727 MB 18.785 MB from Quartz.CoreGraphics import CGImageGetWidth
したがって、特定のインポートは、実際にロードされるものとは関係がないようです。
それ以外の場合は巨大なモジュールからほんの一握りの機能しか必要としないのは、一般的なユースケースのようです。モジュールから必要なものだけをメモリにロードする方法はありますか、それとも外部ライブラリを使用した結果ですか?