Steve Lawrence created DAFFODIL-1933:
----------------------------------------

             Summary: Performance regression with new Base64/Layering changes
                 Key: DAFFODIL-1933
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-1933
             Project: Daffodil
          Issue Type: Bug
          Components: Back End
            Reporter: Steve Lawrence
            Assignee: Michael Beckerle
             Fix For: 2.2.0


Nightly tests showed a fairly drastic performance regression (50% reduction in 
speed) in commit 1ea2290f28: All properties for Base64/layering implemented.

Skimming the code, one change jumped out at me as a likely cause in 
ByteBufferDataInputStream.scala:

{code:language=diff}
@@ -91,7 +90,13 @@ object ByteBufferDataInputStream {
       case _ => {
         // copy the contents of the stream into an array of bytes
         val bos = new ByteArrayOutputStream
-        IOUtils.copy(in, bos)
+        var b: Int = 0
+        while ({
+          b = in.read()
+          b != -1
+        }) {
+          bos.write(b)
+        }
         bos.flush()
         bos.close()
         in.close()
{code}

This changes the copy from a bulk copy to a byte-by-byte copy, which appears to 
have pretty drastic performance. A few simple quick tests shows that reverting 
this change recovers all performance losses.

Mike, can you confirm if this change can be reverted, or if there was some 
other reason related to layering to switch to a byte-by-byte copy?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to