Python 3.x t从文件中插入文本后的CPU活动

Python 3.x t从文件中插入文本后的CPU活动,python-3.x,tkinter,Python 3.x,Tkinter,如果我获取一个25MB/190000行的文本文件并将其转储到一个文本小部件中,该过程会很快完成,但我仍然会看到python.exe使用50%的CPU再运行一分钟左右。文件越大,CPU下降到0%使用率所需的时间就越长。当我开始将多个文件加载到不同的文本小部件中时,它们会立即加载到小部件中,但CPU保持在50%,GUI运行速度非常慢,直到它在后端完成所有操作为止。有人能给我解释一下为什么CPU还在使用,如果文本已经在小部件中,为什么它会影响性能?它需要做什么?有办法吗 from tkinter im

如果我获取一个25MB/190000行的文本文件并将其转储到一个文本小部件中,该过程会很快完成,但我仍然会看到python.exe使用50%的CPU再运行一分钟左右。文件越大,CPU下降到0%使用率所需的时间就越长。当我开始将多个文件加载到不同的文本小部件中时,它们会立即加载到小部件中,但CPU保持在50%,GUI运行速度非常慢,直到它在后端完成所有操作为止。有人能给我解释一下为什么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(),但得到了相同的结果

最有可能的情况是,它正在计算当前屏幕上可见区域以外的线的断线位置。根据您提供的数字,行平均长度超过130个字符;如果他们中的一些人远远超过了这一点,这是一个已知的情况,特金特是缓慢的

您可以关闭自动换行功能(通过将文本配置为
wrap=NONE
),这可能需要添加一个水平滚动条。如果这是不可接受的,那么添加您自己的换行符可能会有所帮助,如果在数据中插入换行符是很自然的


请注意,
'.join(f)
是将整个文件读入单个字符串的一种效率很低的方法-只需使用
f.read()

关闭自动换行功能将1分20秒的时间缩短为19秒。这会有很大帮助。请随意分享任何其他想法。我使用笔记本来加载包含大量不同文本文件的选项卡。当加载很多图形用户界面时,通常需要很长时间才能再次使用图形用户界面。现在不到一分钟。这一变化产生了荒谬的变化。