Just another story you can tell someone who fears that "XYZ might be too slow":
I'm toying with the idea to write a new text editor. I mean, I've written my own OS, my own XML parser and I once maintained XDME, an editor written originally by Matthew Dillon. XDME has a couple of bugs and major design flaws that I always wanted to fix but never really got to it. Anyway.
There are various data structures which are suitable for a text editor and some of those depend on copying data around (see gap buffers). The question is: How effective is that? The first instinct of a developer is to avoid copying large amounts data and to optimize the data structure instead.
After years of training, I've yet to overcome this instinct and start to measure:
public static void main (String[] args) { long start = System.currentTimeMillis (); int N = 10000; for (int i=0; i<N; i++) { int[] buffer = new int[1024*1024]; System.arraycopy (buffer, 0, buffer, 1, buffer.length-1); } long duration = System.currentTimeMillis () - start; System.out.println (duration); System.out.println (duration / N); }
On my computer at work (which is pretty fast but not cutting edge), prints: "135223" and "13". That's thirteen milliseconds to copy 4MB of RAM. Okay. It's obviously not worth to spend a second to think about the cost of moving data around in a big block of bytes.
Lesson: If you're talking about performance and you didn't measure, you have no idea what you're talking about.
Still not convinced? Read this.
No comments:
Post a Comment