2011-02-08 8 views
1

IronPython 2.6.1とclr.CompileModules関数を使用して大きなスクリプトをアセンブリにコンパイルするための実験を行っています。テストでは、コールドスタートのパフォーマンスが向上していますが、場合によっては、コードを表す大きな文字列を実行するよりも実際にコンパイルされたモジュールのインポートが遅くなることがあります。私は新しいScriptSCopeバック輸入は、他のScriptScopesで行われたDLRキャッシュを行い得るにもかかわらず、IronPythonのコードをコンパイルした場合のインポートパフォーマンス

scope.Engine.Execute(string.Format("from {0} import {0}", theModule), scope); 

またはImportModule機能のようなものを使用している場合

私の質問は、ありますか?したがって、モジュール1とモジュール10が同じタイプをインポートする場合、パフォーマンスヒットは1回だけです。

clr.CompileModulesscope.Compile()よりも優先して使用していますか?私が理解しているのは、オンザフライコンパイルは、余分なアセンブリを管理する必要がなく、コンパイルコストを一度しか支払う必要がない場合に便利です。

答えて

1

DLRはインポートをキャッシュしませんが、IronPythonはキャッシュしません。

私はあなたの理解は正しいと思う - clr.CompileModulesは通常スタートアップの利益のために良いです。また、アセンブリーをngen'ingと組み合わせることもできます。もしあなたがそれをまだやっていないのなら、パフォーマンスが悪化することがあるかもしれません。まずコードを解釈してコードをコンパイルする時にJITを避けることができますが、コンパイルすると常にJITが必要です。 + ngenをコンパイルすることは、それらのすべてを設定することを必要とすること以外に、両方の世界の中で最高です。

+0

ありがとう、私はアプリケーション上でdotTraceを実行していて、コンパイルされたIronPythonコードへの切り替えは間違いなくコールドスタートのパフォーマンスのように見えます。しかし、私はまだImportModuleで長い時間を費やしています。私は29個のモジュールを含むアセンブリを1つ持っており、同じスコープ内で "foo import barから"実行しています。そのクラスをC#で使用するために抽出しています。これらのモジュールのインポートの依存関係を減らすことは、モジュール自体のインポート時間と同じでしょうか? –

関連する問題