james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sandiep U. Sharma" <sandiin...@yahoo.com>
Subject RE: new InputStream class for mail data
Date Fri, 18 Jul 2003 16:48:46 GMT

--- "Noel J. Bergman" <noel@devtech.com> wrote:
> > Since we are talking about improving SMTP data
> handler
> > class I want to draw attention to some performance
> > issues I had found earlier while analyzing
> > CharTerminatedInputStream class.
> > The point of major concern was the use of read
> method
> > to read data from Socket InputStream. for example
> if
> > we consider an average mail size of 40KB, read
> method
> > will be called 40 x 1024 = 40960
> This seems to be factually wrong.  Consider the
> following:
>             in = new
> BufferedInputStream(socket.getInputStream(), 1024);
>             inReader = new CRLFTerminatedReader(in,
> "ASCII");
>             InputStream msgIn = new
> CharTerminatedInputStream(in,
> SMTPTerminator);
> In all cases, the filtered data is coming through
> BufferedInputStream with a
> 1K buffer.

The point here is not that the data is coming from
BufferedInputStream. The point of concern is that the
read() method is called so many times putting a huge
amount of function call overhead so i am just trying
find a way to avoid that.

I would prefer a approach wherein we read a block of
data and use a for loop to find out the terminating
characters, if terminator falls  at the block
boundary, read next block and continue to match
terminator. In this process any extra bytes in buffer
can be easily unread if we use PushBackInputStream.

The logic behind the above approach is that the for
loop executes much faster on a block of data say 2KB
as compared to calling read() method 2048 times over
the same block.

I have tested the above mentioned approach and the
results are quite impressive. It takes 12 seconds to
read 110KB mail file 1000 times using
CharTerminatedInputStream while on the other hand it
takes hardly 5 seconds to read the same mail file 1000
times using the new approach. The hardware
configuration was CPU P4/RAM 256MB DDR/HDD 40GB/OS Win

I'll submit the source code of my test routine and the
new optimized InputStream in my forthcoming mails.


Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!

To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org

View raw message