输出到 ScrolledText 小部件时是否存在内存限制?
Are there memory limitations when outputting to a ScrolledText widget?
我对 Python 和 GUI 编程还很陌生,并且一直在学习 Tkinter 包以进一步发展。
我编写了一个简单的数据记录器,它通过串行或 TCP 连接向设备发送命令,然后读回响应,将其显示在 ScrolledText 小部件中。此外,我还有一个按钮可以让我将 ScrolledText 小部件的内容保存到文本文件中。
我通过发送循环命令来测试我的软件,命令之间有 0.5 秒的延迟。目的是测试记录器的耐用性,以便以后可以部署它来自动监视和记录它所连接的设备的输出。
30-40分钟后,我发现程序在我的Windows7系统上崩溃了,我怀疑可能是内存问题。崩溃是一条相当不起眼的 "pythonw.exe has stopped working" 消息。当我使用 Windows 任务管理器监控进程时, pythonw.exe 使用的内存在每次读取响应时都会增加,最终将达到近 2Gb。
可能是我需要重新考虑我的逻辑并让软件在 'real time' 中记录到磁盘,而 ScrolledText 框在 x 行后覆盖最旧的数据...但是,对于我自己的教育,我想知道是否有更好的方法来管理 ScrolledText 使用的内存?
提前致谢!
一般来说,不,写入滚动文本小部件没有内存限制。在内部,文本存储在高效的 b 树中(高效,除非所有数据都是一行,因为 b 树的叶子是行)。可能会有某种限制,但可能在数百万行左右。
我对 Python 和 GUI 编程还很陌生,并且一直在学习 Tkinter 包以进一步发展。
我编写了一个简单的数据记录器,它通过串行或 TCP 连接向设备发送命令,然后读回响应,将其显示在 ScrolledText 小部件中。此外,我还有一个按钮可以让我将 ScrolledText 小部件的内容保存到文本文件中。
我通过发送循环命令来测试我的软件,命令之间有 0.5 秒的延迟。目的是测试记录器的耐用性,以便以后可以部署它来自动监视和记录它所连接的设备的输出。
30-40分钟后,我发现程序在我的Windows7系统上崩溃了,我怀疑可能是内存问题。崩溃是一条相当不起眼的 "pythonw.exe has stopped working" 消息。当我使用 Windows 任务管理器监控进程时, pythonw.exe 使用的内存在每次读取响应时都会增加,最终将达到近 2Gb。
可能是我需要重新考虑我的逻辑并让软件在 'real time' 中记录到磁盘,而 ScrolledText 框在 x 行后覆盖最旧的数据...但是,对于我自己的教育,我想知道是否有更好的方法来管理 ScrolledText 使用的内存?
提前致谢!
一般来说,不,写入滚动文本小部件没有内存限制。在内部,文本存储在高效的 b 树中(高效,除非所有数据都是一行,因为 b 树的叶子是行)。可能会有某种限制,但可能在数百万行左右。