tclcompiler Code
Brought to you by:
aotto1968
#§ #§ CompPerf - tcl_read.perf #§ #§ (C) IPN - Ingenieurbuero fuer Praezisionsnumerik #§ #§ Dipl.-Ing. Andreas Otto #§ Ulmenstrasse 3 #§ D-34289 Zierenberg #§ mailto:aotto@t-online.de #§ #§ Alle Rechte vorbehalten #§ package require PerfLib ## ## ----------------------------------------------------- ## the test-procs ## # Read a file using gets proc read-gets {filename {trans {}}} { set fp [open $filename r] if {[string compare $trans {}] && ([info tclversion] > 8.1)} { fconfigure $fp -translation $trans } while {[gets $fp line] != -1} {} close $fp } # Read a file using read only proc read-read {filename {trans {}}} { set fp [open $filename r] if {[string compare $trans {}] && ([info tclversion] > 8.1)} { fconfigure $fp -translation $trans } read $fp close $fp } # Read a file using read and [file size] proc read-read-size {filename {trans {}}} { set fp [open $filename r] if {[string compare $trans {}] && ([info tclversion] > 8.1)} { fconfigure $fp -translation $trans } read $fp [file size $filename] close $fp } proc makeFiles {largeFile smallFile} { # 60 chars set line "012345678901234567890123456789012345678901234567890123456789" set largeFid [open $largeFile w] # 60 * 10000 = 595K for {set i 0} {$i < 10000} {incr i} { puts $largeFid $line } close $largeFid set smallFid [open $smallFile w] # 60 * 50 = <3K for {set i 0} {$i < 50} {incr i} { puts $smallFid $line } close $smallFid } set largeFile TMP.lrg set smallFile TMP.sml makeFiles $largeFile $smallFile set large "[expr {[file size $largeFile]/1024}]K" set small "[file size $smallFile]b" ## ## ----------------------------------------------------- ## make the test's ## set NUM [ ::PerfLib::Num 30 ] set TOTAL [ time { ::PerfLib::Register read-getsA "READ $large, gets" ::PerfLib::Run read-getsA [time {read-gets $largeFile} $NUM] ::PerfLib::Register read-readA "READ $large, read" ::PerfLib::Run read-readA [time {read-read $largeFile} $NUM] ::PerfLib::Register read-read-sizeA "READ $large, read & size" ::PerfLib::Run read-read-sizeA [time {read-read-size $largeFile} $NUM] ::PerfLib::Register read-getsB "READ $small, gets" ::PerfLib::Run read-getsB [time {read-gets $smallFile} $NUM] ::PerfLib::Register read-readB "READ $small, read" ::PerfLib::Run read-readB [time {read-read $smallFile} $NUM] ::PerfLib::Register read-read-sizeB "READ $small, read & size" ::PerfLib::Run read-read-sizeB [time {read-read-size $smallFile} $NUM] ::PerfLib::Register read-getsC "BREAD $large, gets" ::PerfLib::Run read-getsC [time {read-gets $largeFile binary} $NUM] ::PerfLib::Register read-readC "BREAD $large, read" ::PerfLib::Run read-readC [time {read-read $largeFile binary} $NUM] ::PerfLib::Register read-read-sizeC "BREAD $large, read & size" ::PerfLib::Run read-read-sizeC [time {read-read-size $largeFile binary} $NUM] ::PerfLib::Register read-getsD "BREAD $small, gets" ::PerfLib::Run read-getsD [time {read-gets $smallFile binary} $NUM] ::PerfLib::Register read-readD "BREAD $small, read" ::PerfLib::Run read-readD [time {read-read $smallFile binary} $NUM] ::PerfLib::Register read-read-sizeD "BREAD $small, read & size" ::PerfLib::Run read-read-sizeD [time {read-read-size $smallFile binary} $NUM] } 1 ] ## ## ----------------------------------------------------- ## cleanup ## ::PerfLib::Exit file delete -force -- $largeFile $smallFile