Tcl Source Code

View Ticket
Login
Ticket UUID: 429916
Title: [binary scan] large string optimisation
Type: Patch Version: None
Submitter: msofer Created on: 2001-06-03 22:21:44
Subsystem: 12. ByteArray Object Assigned To: dkf
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2001-11-29 22:46:34
Resolution: Out of Date Closed By: dkf
    Closed on: 2001-11-29 15:46:34
Description:
This is similar to DKF's solution of [Bug #131523]:
when splitting binary strings into integer components
(c*, s*, S*, i*, I* format strings), it avoids creating
a Tcl_Obj per integer. Using a hash table, it creates
just one Tcl_Obj per integer, with multiple assignments
if it appears more than once.

Makes a huge difference to splitting of long binary
strings, such as is done in the mime package in tcllib.
User Comments: dkf added on 2001-11-29 22:46:33:
Logged In: YES 
user_id=79902

I've had a look at this, and found that the most effective
technique was to limit the size of the cache (260 entries
worked well and should handle the split-byte-case nicely)
and *delete* the cache and stop looking once the number of
elements exceeded that. I suppose this has something to do
with the marginal benefit from adding a few more elements at
that size being very small. Not particularly obvious, I must
admit...

hobbs added on 2001-06-04 08:13:47:

File Added - 6978: binary.patch

Logged In: YES 
user_id=72656

This doesn't improve speed because the ScanNumber
always creates an object.  A slight change allows
this to improve speed (attached patch), but only
starting at 5000 byte of input (as opposed to the
split version, which benefits already at 500 chars).

msofer added on 2001-06-04 05:21:45:

File Added - 6976: binary.patch

Attachments: