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:
- binary.patch [download] added by hobbs on 2001-06-04 08:13:47. [details]