私はPythonでファイルリーダーに取り組んでおり、asciiファイルを〜100MB読み取ることを期待しています。上部に一連のヘッダー情報があり、タブ区切りの列のみがあります。一部の列には数値以外のデータが含まれています (今は気にしません)。30MB のサンプル ファイルを 1.5 秒未満で読み取る matlab 実装があります。私の python リーダーは、CPython で約 2 秒かかりますが、IronPython では約 4 秒かかります。違いは、文字列値が変換された float を取得する場所にあるようですが、IronPython で高速化することはできませんでした。
ここでの私の最新の反復には、行を読み取って解析するための次のループがあります
#-Parse the actual data lines
istep = -1
while len(line) > 0:
istep += 1
#-Split the line and convert pasred values to floats
timestep = line.split();
for ichan in numericChannels:
data[ichan].append(float(timestep[ichan]))
line = f.readline().strip()
numericChannels
読み取りたいチャネルを指定する整数のリストです。 data
はリストのリストで、サブリストはデータの列です。
パフォーマンスの違いは、float 変換によるものと思われます。これをスピードアップするために IronPython で何ができるかについてのアイデアはありますか? ファイルを事前に読み取ってから、 System.Threading.Task.Parallel.ForEach コンストラクトを使用してファイル行を解析することさえ試みました。それはまったく役に立ちませんでした。
ありがとう。