Yeah, put the file on a dropbox somewhere and share the link. I'd like to see why this is "slow". I am reading tons of data from a MongoDb and it is superfast. Phil On Tue, Mar 17, 2015 at 10:24 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Can you post/share your file (jfreechart-0_9_0.mse) somewhere so we can run the same test ?
Also, in your Java code I do not see a loop doing the benchmark 10 times ...
On 17 Mar 2015, at 10:19, Nicolas Anquetil <nicolas.anquetil@inria.fr> wrote:
Eliot, Sven, Stephan,
thank you for your answers.
As you noticed I am not an expert in profiling :-)
it seems now I might have goofed up and the time taken by pharo in my initial program (compared to java) is due to some other extra compilation I was doing.
So the "macro benchmark" might be wrong
Still the "micro benchmark" still holds I tested the code proposed by Elliot and the result is ....
--- [1 to: 10 do: [:j || a length | length:=0. a := '/home/anquetil/Documents/RMod/Tools/workspace/Blocks/jfreechart-0_9_0.mse' asFileReference readStream contents. 1 to: a size do: [ :i| | c | c:= a at: i. length:= length+1]]] timeToRunWithoutGC ---
12.723 sec.
[reminder] For java it is: 1.482 sec.
so it is still a factor 8 or 9 it seems a lot for such a simple thing, no? (or maybe not, I don't know)
nicolas
On 16/03/2015 09:49, Nicolas Anquetil wrote:
I have been doing some file intensive activities and found my program to be VERY slow (see at the end). Just to be sure I ran them in Java and found it was much faster
So I did a small test: --- [10 timesRepeat: [i := 0. '/home/anquetil/Documents/RMod/Tools/workspace/Blocks/jfreechart-0_9_0.mse' asFileReference readStream contents do: [ :c | i:= i+1]. ] ] timeToRunWithoutGC. ---
result = 12.932 sec
similar thing (as far as I can tell) 10 times in java: 1.482 sec. --- public static void main(String[] args) { int length =0; try { String filename = "/home/anquetil/Documents/RMod/Tools/workspace/Blocks/jfreechart-0_9_0.mse"; String content = new String(Files.readAllBytes(Paths.get(filename)), "UTF8"); for (int i=0; i < content.length(); i++) { content.charAt(i); length = length+1; } } catch (IOException e) { e.printStackTrace(); } System.out.println(length); } ---
Because my program is MUCH slower (see at the end) in Smalltalk than in Java, I did another experiment:
--- [1 to: 10 do: [:i| 1 to: 100000000 do: [:j | String new] ] ] timeToRunWithoutGC. ---
result = 33.063 sec
and in java: 4.382 sec. ---[10 runs of] public static void main(String[] args) { for (int i=0; i < 100000000; i++) { new String(); } } ---
Concretly, my need was: Take 2600 methods in a Moose model, take their source code (therefore reading files), for methods longer than 100 lines (there are 29 of them), go through there code to find the blocks (matching {}). In smalltalk it ran > 12hours and I had processed 5 methods of the 29 long ones I reimplemented in Java (basically, just changing from pharo to java syntax) and it took 1 minutes to compute everything ...
:-(
On the good side, it was much easier to program it in smalltalk (about half a day to think about the algorithm, experiement, implement, test) than in Java (another 1/2 day, just to recode the algorithm that already worked).
nicolas