7

OK、ネットワーク関連のアプリケーションを開発しています。そのアプリケーションでは、独自のPythonスクリプトをアップロードしてアルゴリズムを決定することができます。私たちのコードには、cとcythonとpythonモジュールが含まれています。ガーベジコレクションはpythonを遅くしますか?

ガベージコレクションを無効にしてメモリの割り当てを処理するのが賢明で効果的なのかどうかは、パフォーマンス面では驚くべきことでした。

+3

私たちは、あなたが持っているプログラマーの質をどのように知っていますか?メモリリークを導入することで簡単に悪化させることができます。 – Blindy

+0

cython仮想マシンに組み込まれているガベージコレクションを "オフ"にする方法を正確に提案しますか? –

+0

メモリリークを起こさない優れたプログラマを想定して、ダブルフリーです。私は、手動での割り当て解除の効率が低下するかどうかを知りたいだけです。私はどこかでピュータンガベージコレクターが毎回無料ではなく、物事の組み合わせを呼び出すようなテクニックを使っていると読んでいました。それが本当であるかどうかは分かりません。 – theRealWorld

答えて

11

gc.disableは、サイクリックガベージコレクタのみをオフにします。とにかくrefcountが0に落ちると、オブジェクトは引き続き収集されます。したがって、循環参照がたくさんある場合を除いて、違いはありません。

カスタマイズされたPythonビルドを行い、リファレンスカウントGCを無効にすることについて話していますか?

+0

一般に、GCをカウントするのはどれくらい遅いですか? – theRealWorld

18

実際に問題を抱えているとわかった場合は、戻って投稿してください。それ以外の場合は時期尚早の最適化です。

+0

これは非常に真実です! –

5

機能的に正しいようにアプリケーションを開発するだけです。正しいアプリケーションを取得したら、プロファイラを起動して、スロービットがどこにあるかを判断します。ユーザースクリプトのパフォーマンスが心配な人は、おそらく間違ったことに焦点を当てているでしょう。

最初の開発が完了する前に最適化を試みるのは、おそらく賢明ではなく、効果がないと思われます。

4

ガベージコレクションではすべてが遅くなります。また、すべてがエラーを起こしにくいものになります。特に、ユーザーがアップロードしたスクリプトを実行することが重要な点であれば、トレードオフがうまくいくとは思えません。リークや二重解放がある場合、誰かがそれを引き起こす方法を見つけ出すことができれば、今はDoSの脆弱性が存在します。

1

CPython(元々かつ最も使用されているPython)は、ガベージコレクションのための参照カウント手法を使用します。参照されなくなったオブジェクトはすぐに解放されます。したがって、サイクルを作成しない場合は、サイクルを検出するためだけに存在するガベージコレクタはあまり呼び出されません。

2

自動ガベージコレクションの言語で作業するのにかなりの時間を費やしました。ネイティブガベージコレクションがカスタムソリューションよりも高速で信頼性が高いと信頼できることはほぼ一元的に言えるでしょう。

関連する問題