[ http://issues.apache.org/jira/browse/LUCENE-435?page=all ]
Lukas Zapletal updated LUCENE-435:
----------------------------------
Attachment: fastWrite.patch
Hello,
I have done what you requested (sorry for the late delay - too busy). I also
found a bug in RAMOutputStream - the implementation of flushBuffer method was
not able to write any buffers longer than 2*BUFFER_LENGTH. My fast writeBytes
patch now handle all various situation and uses the fastest methods to write
data.
In my opinion its not good to make BUFFER_LENGTH constant public. Consider
making it private since this can lead to nontrivial "dependency" (as I have
described above). Its not good to have one buffer length for input, output and
RAM* objects (which should have independant buffer length at all - it has
nothing to do with the caching in the abstract methods). Making it private and
maybe accessible on runtime could help a litte (as I said -- I use the API for
some index copying and I would like to have larger buffers).
Anyway, this is my contribution, I am looking for more reviews. The patch
includes StoreTest modification which helps with testing either writeByte
method or writeBytes methods. Thanks for your attention.
> [PATCH] BufferedIndexOutput - optimized writeBytes() method
> -----------------------------------------------------------
>
> Key: LUCENE-435
> URL: http://issues.apache.org/jira/browse/LUCENE-435
> Project: Lucene - Java
> Type: Improvement
> Components: Store
> Reporter: Lukas Zapletal
> Priority: Minor
> Attachments: BufferedIndexOutputWriteBytes.patch, fastWrite.patch,
> writeBytes.patch
>
> I have created a patch that optimize writeBytes metod:
> public void writeBytes(byte[] b, int length) throws IOException {
> if (bufferPosition > 0) // flush buffer
> flush();
>
> if (length < BUFFER_SIZE) {
> flushBuffer(b, length);
> bufferStart += length;
> } else {
> int pos = 0;
> int size;
> while (pos < length) {
> if (length - pos < BUFFER_SIZE) {
> size = length - pos;
> } else {
> size = BUFFER_SIZE;
> }
> System.arraycopy(b, pos, buffer, 0, size);
> pos += size;
> flushBuffer(buffer, size);
> bufferStart += size;
> }
> }
> }
> Its a much more faster now. I know that for indexing this not help much, but
> for copying files in the IndexStore this is so big improvement. Its about
> 400% faster that old implementation.
> The patch was tested with 300MB data, "ant test" sucessfuly finished with no
> errors.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]