[ 
https://issues.apache.org/jira/browse/FILEUPLOAD-198?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13066347#comment-13066347
 ] 

Andreas Girgensohn commented on FILEUPLOAD-198:
-----------------------------------------------

If you don't want create additional method signatures, you could use the 
following in MultipartStream and Streams.

private static final int IO_BUFFER_SIZE = 8192;
private static final ThreadLocal<SoftReference<byte[]>> io_buffer_ref = new 
ThreadLocal<SoftReference<byte[]>> ();

protected static byte[] getIOBuffer () {
  byte[] io_buffer = null;
  SoftReference<byte[]> ref = io_buffer_ref.get ();
  if (ref != null)
    io_buffer = ref.get ();
  if (io_buffer == null) {
    io_buffer = new byte[IO_BUFFER_SIZE];
    io_buffer_ref.set (new SoftReference<byte[]> (io_buffer));
  }
  return io_buffer;
}

> Add two optional parameters to FileUploadBase.getItemIterator() to pass 
> temporary buffers similar to Streams.copy()
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: FILEUPLOAD-198
>                 URL: https://issues.apache.org/jira/browse/FILEUPLOAD-198
>             Project: Commons FileUpload
>          Issue Type: Improvement
>    Affects Versions: 1.2.2
>         Environment: Fedora 15. Tomcat 6.
>            Reporter: Andreas Girgensohn
>            Priority: Minor
>             Fix For: 1.2.2
>
>
> When processing a large number of multipart uploads, new byte buffers are 
> created for every part of every request.  It would be preferable if the 
> servlet could reuse those buffers for the next request.  Failing that, it 
> would already be an improvement if FileUploadBase.findNextItem() could pass 
> the same buffer to subsequent calls of MultipartStream.skipPreamble() and 
> discardBodyData().
> The item iterator would need two temporary buffers.  One would be passed to 
> MultipartStream via a new constructor.  The other would be passed to 
> readBodyData(), discardBodyData(), and skipPreamble() to be passed on to 
> Streams.copy().
> This change would require additional signatures for five methods constructors 
> and methods but it would reduce memory allocation by a noticeable amount.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to