2017-06-19 19 views
3

25MB/190,000行のテキストファイルをテキストウィジェットにダンプすると、プロセスはすばやく終了しますが、その後も1分後に50%CPUを使用するpython.exeが表示されます。ファイルが大きければ大きいほど、CPU使用率が0%に低下するまでに時間がかかります。別のテキストウィジェットに複数のファイルをロードすると、即座にウィジェットにロードされますが、CPUは50%のままで、バックエンドで何が行われてもGUIはひどく遅くなります。誰かがなぜCPUがまだ使用されているのか、そのテキストがウィジェット内にある場合のパフォーマンスへの影響の理由を私に説明することはできますか?それは何をする必要がありますか?これはどうですか?ファイルからテキストを挿入した後のTkinter CPUアクティビティ

from tkinter import * 


file = r"C:\path\to\large\file.txt" 

def doit(): 
    with open(file, 'r') as f: 
     txt.insert('end', ''.join(f)) 
     f.close() 
main = Tk() 

txt = Text(main) 
txt.grid(row=0) 

btn = Button(main, text="click here", command=doit) 
btn.grid(row=1, columnspan=2) 

main.mainloop() 

ファイル全体をRAMに読み込む代わりに、行ごとにファイルを処理していたと思われたのかもしれません。 readlines()を試しましたが、同じ結果が得られます。

答えて

4

ほとんどの場合、画面上に現在表示されている領域を超えている行について、改行の位置を計算している可能性があります。指定した数値では、行の長さは130文字を超えます。それらのうちのいくつかがかなり上回っている場合、これはTkinterが遅いと知られている状況です。

おそらくワードラップをオフにすることができます(テキストをwrap=NONEで設定することによって)水平スクロールバーそれが受け入れられない場合、あなたのデータにそれらを挿入するいくつかの自然な点がある場合は、自分の改行を追加すると助けになる可能性があります。

''.join(f)は、ファイル全体を1つの文字列に読み込むには、どちらかといえば非効率的な方法です。ちょうどf.read()を使用してください。

+0

ワードラップをオフにすると、1分20秒でわずか19秒になります。これはTONを助けるでしょう。他のアイデアを自由に共有してください。 – sidnical

+0

ノートブックを使用して、さまざまなテキストファイルの多いタブを読み込みます。それらの多くを読み込むとき、それはGUIが再び使用可能になるまで永遠にかかりました。今は1分足らずです。この変更はばかばかしい違いになりました。 – sidnical

関連する問題