|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
我使用TCL来读取一个文件里的数据,该文件里存放的都是二进制数据,每个数据都是32bit,这个文件大小大概50M字节(Windows系统),所以一共大概包含有800万个这样的32bit的数据。
我TCL代码要做的事情是每次读取一个32bit的数据分析后,在一个画布上画出一个点,最后将所有数据读出点阵在画布上,现在的问题是运行TCL代码后电脑死机状,查看window任务管理发现这个进程占据了大部分内存,分析是tcl代码从文件读来数据全部临时存在内存里了,无法释放。修改代码只读10万个数据结果能很快出来。下面截取一段关键代码:
- ;###下述代码读取二进制文件,获取PPU参数
- set cnt 0
- ;##set chan [open "bin_lg5mm.txt" r]
- set chan [open "lg5mm.dat" r]
- fconfigure $chan -translation binary
- while {1} {
- set data_read [read $chan 4];##一次读4个字节,即32bit,在循环体中,该命令似乎可以自动连续往后读。
- binary scan $data_read "H*" tmp0;##将这4个字节转换成16进制数据
-
- set m_val [get_m $tmp0]
- set x_val [get_x $tmp0]
- set y_val [get_y $tmp0]
- pain_cross_star $m_val $x_val $y_val
- ;##flush $chan
- ;##if {[eof $chan]} {;###判断是否到文件末尾,由于lg5mm.dat文件太大,写入文本文件时间长,有时会导致内存不足。
- ;## break
- ;##}
- ;###下列代码是部分转换
- incr cnt
- if {$cnt > 10000} {
- close $chan
- break
- }
-
- }
复制代码 |
|