私はいくつかのコードに取り組んでいます。私の通常のアプローチは、問題のすべてを最初に解決し、問題を解決するために必要なコードとループを作成し、コードを再利用することを期待したら、私は機能を作成するためにグループ化する必要があると思います。コードが関数にラップされているときにメモリ効率が向上していますか?
私は、関数を作成して呼び出すことは、コードの行を記述してコンテナを削除するよりもはるかに効率的であるように見えました。例えば
:
def someFunction(aList):
do things to aList
that create a dictionary
return aDict
>>do things to alist
>>that create a dictionary
>>del(aList)
よりも最後に多くのメモリを解放しているようだが、この予想される動作ですか?この機能は、PFの使用を実行するfilingsListは約8万行を有し、約100メガバイトの増加を示す終了する
EDITは、例えば、コード
を加えました。私が代わりにこれを実行した場合
def getAllCIKS(filingList):
cikDICT=defaultdict(int)
for filing in filingList:
if filing.startswith('.'):
del(filing)
continue
cik=filing.split('^')[0].strip()
cikDICT[cik]+=1
del(filing)
ciklist=cikDICT.keys()
ciklist.sort()
return ciklist
allCIKS=getAllCIKS(open(r'c:\filinglist.txt').readlines())
は、私はほとんど400メガバイト
cikDICT=defaultdict(int)
for filing in open(r'c:\filinglist.txt').readlines():
if filing.startswith('.'):
del(filing)
continue
cik=filing.split('^')[0].strip()
cikDICT[cik]+=1
del(filing)
ciklist=cikDICT.keys()
ciklist.sort()
del(cikDICT)
EDIT 私はいくつかのより多くの今日こので遊んでてきたの増加を示します。私の焦点はPF使用法に基づいているので、私の観察と質問は少し洗練されていなければなりません。残念ながら、私は他のタスクの間でこれを突き止めることができます。しかし、私は参考文献とコピーについて不思議に思っています。リストから辞書を作成すると、辞書コンテナはリストから来た値のコピーを保持するか、リストの値への参照を保持しますか?私の賭けは値が参照の代わりにコピーされるということです。
もう1つ気づいたのは、GCリストのアイテムが、削除されたコンテナのアイテムだということです。それは理にかなっていますか?私はリストを持っていて、リスト内の各アイテムが[(aTuple)、anInteger、[別のリスト]]であったとします。私がgcオブジェクトを操作する方法を学習し始めたとき、リストが強制的に削除されたにもかかわらず、私が覚えていないメソッドに0 & 2の値を渡したにもかかわらず、それらを削除しようとする。
人々が共有している洞察を高く評価します。残念ながら、私は常にフードの中で物事がどのように機能するかを理解することに興味があります。
リリースされたメモリ量はどのように測定していますか? – Joe
WindowsのタスクマネージャでPFの使用状況を見ています。 – PyNEwbie
@PyNEwbie:実際のコードを含むようにサンプルを編集できますか?それは本当に起こっていることを追跡するために長い道のりを行くことができます。 –