Hernán, Am 23.07.2013 um 16:13 schrieb Hernán Morales Durand <hernan.morales@gmail.com>:
El 23/07/2013 9:01, Norbert Hartl escribió:
Am 23.07.2013 um 13:20 schrieb Hernán Morales Durand <hernan.morales@gmail.com>:
Have a look at InstanceEncoder
Thanks, how would you say it works compared to store an Fuel ByteArray?
This is not difficult to test. First save your image and download this file, is the chromosome 22 of a human reference genome (about 10mb of gzip file):
| client ttr object fileName fStream | fileName := 'hs_alt_HuRef_chr22.fa.gz'. [ client := (FTPClient openOnHostNamed: 'ftp.ncbi.nlm.nih.gov') loginUser: 'anonymous' password: ''; binary; changeDirectoryTo: 'genomes/H_sapiens/CHR_22'. (FileStream newFileNamed: fileName) binary; nextPutAll: (client getFileNamed: fileName); close ] on: NetworkError, LoginFailedException do: [ : ex | self error: 'Connection failed' ].
Now storing with InstanceEncoder:
fileName := 'hs_alt_HuRef_chr22.fa.gz'. ttr := [ Object store: fileName asFileReference contents asSelector: #storedObjectInstanceEncoder ] timeToRun. (Duration milliSeconds: ttr) asSeconds.
And with Fuel
Smalltalk garbageCollect. fileName := 'hs_alt_HuRef_chr22.fa.gz'. ttr := [ Object class compile: 'storedObjectFuel ^ ', (ByteArray streamContents: [ : stream | FLSerializer serialize: fileName asFileReference contents on: stream ]) storeString ] timeToRun. (Duration milliSeconds: ttr) asSeconds.
Results for writing =================== InstanceEncoder avg: 8 sec. Fuel avg: 45 sec.
And reading scripts:
[ Object storedObjectInstanceEncoder ] timeToRun. [ FLMaterializer materializeFromByteArray: Object storedObjectFuel ] timeToRun
Results for reading =================== InstanceEncoder avg: 3955 msec Fuel avg: 70 msec
And the final cleaning of course :)
Object class removeSelector: #storedObjectFuel. Object class removeSelector: #storedObjectInstanceEncoder.
Thanks for the evaluation. I was more thinking about _how_ it works. But I take "similar" as an answer for now. :) Norbert
Norbert
El 23/07/2013 7:47, Norbert Hartl escribió:
I try to untangle my modules. I have a parser that creates a model and a tool that uses that model. For testing it is convenient to just generate the model and work with it. But this way I introduce dependencies which always pulls everything in.
In order to untangle I would need a way to easily serialize the runtime model into methods or something similar. Anything that can be transported via monticello is ok. I just don't want to have dependencies to present of external files. That would just change the problem but not solving it.
Any ideas?
Norbert
.