1

SymPy をインポートして使用しようとしているときに、VS2010 内の IronPython でいくつかのパフォーマンスの問題が発生しています。

次のコードを含む IronPython テスト プロジェクトがあります。

import time

print 'StandaloneIronPython'

startTime = time.time()
from sympy import *
importTime = time.time() - startTime
print 'Import time = %f' % importTime

startTime = time.time()
for x in (x/10.0 for x in xrange(-100,100)):
    (x**2-2*x)
numericsTime = time.time() - startTime
print 'Basic numerics time= %f' % numericsTime

startTime = time.time()
for x in (x/10.0 for x in xrange(-100,100)):
    N(x**2-2*x)
sympyTime = time.time() - startTime
print 'SymPy time = %f' % sympyTime

raw_input('Press enter to continue...')

SymPyは卵としてダウンロードおよびインストールされました。私の「IronPython 2.7\Lib\site-packages」フォルダーは、プロジェクトの検索パスにあります。

「Debug > Start Debugging」でプログラムを実行すると、おおよそ次のようになります。

StandaloneIronPython
Import time = 12.090019
Basic numerics time= 0.015594
SymPy time = 2.230804
Press enter to continue...

ただし、「デバッグ>デバッグなしで開始」を介してプログラムを実行すると、おおよそ次のようになります。

StandaloneIronPython
Import time = 2.199600
Basic numerics time= 0.015602
SymPy time = 0.140404
Press enter to continue...

インポートの速度が最大 5 倍になり、sympy の実行速度が 10 倍を超えます。

では、ライブラリ コードのデバッグにすべての時間を費やしている場合、IronPython から優れたパフォーマンスを得るにはどうすればよいでしょうか?

  • SymPy をライブラリ、アセンブリ、またはすばやく実行できるものとしてバンドルする方法はありますか?
  • SymPy のコードをデバッグしないように VS2010 に指示する方法はありますか?
  • 他の種類の解決策はありますか?
4

1 に答える 1

0

デバッガーがアタッチされている場合とアタッチされていない場合の実行でパフォーマンスに大きな違いが見られる場合は、通常、デバッガーが処理する必要のある大量のイベントをアプリが生成していることが原因です。

これの最も一般的な例は例外です。SymPy が初期化中に非常に多くの例外をスローおよびキャッチしている場合、例外ごとにデバッガーへのラウンドトリップが発生し (たとえ処理されたとしても)、大幅な速度低下が発生します。

これを確認するには、[デバッグ] > [例外...] に移動し、[共通言語ランタイムの例外] の横にある [スロー] ボックスをオンにして、アプリを再実行します。何百もの例外で停止する場合は、問題があります。

それが本当にあなたの問題である場合、残念ながら良い回避策はありません。Python コードを .dll にプリコンパイルしても、これらの例外がスローされるのを防ぐことはできません。

于 2011-06-01T21:56:00.660 に答える