[Mono-bugs] [Bug 73570][Wis] Changed - Serialization/Deserialization of double[] array can be enhanced

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Wed, 23 Mar 2005 16:05:41 -0500 (EST)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by lluis@ximian.com.

http://bugzilla.ximian.com/show_bug.cgi?id=73570

--- shadow/73570	2005-03-12 23:32:04.000000000 -0500
+++ shadow/73570.tmp.32580	2005-03-23 16:05:41.000000000 -0500
@@ -1,13 +1,13 @@
 Bug#: 73570
 Product: Mono: Class Libraries
 Version: unspecified
 OS: GNU/Linux [Other]
 OS Details: Linux skif 2.4.25 #2 SMP Fri Apr 23 14:03:00 MSD 2004 i686 athlon i386 GNU/Linux
-Status: NEW   
-Resolution: 
+Status: RESOLVED   
+Resolution: FIXED
 Severity: Unknown
 Priority: Wishlist
 Component: CORLIB
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: vguzev@yandex.ru               
 QAContact: mono-bugs@ximian.com
@@ -139,6 +139,21 @@
 So, what? This new test case shows that serializing a byte array is
 faster than serializing a dobule array of the same size. I've already
 said that I will review this. But don't expect it to be as fast as
 block copy to a byte array, or even a serialization of an equivalent
 byte array, like in this second test case (I'm now wondering if byte
 swapping would be needed for little-endian systems).
+
+------- Additional Comments From lluis@ximian.com  2005-03-23 16:05 -------
+This has been fixed in SVN HEAD. The serializer now read/writes data
+in chunks of bytes, and it's much faster in this way.
+
+Just a last note about your test case: if you don't provide an initial
+capacity when creating MemoryStream, it is initialized with a buffer
+of 256 bytes. The buffer will grow when needed, and growing means
+creating a new array doubling the size of the old one, and copying
+into it the old values. This is an expensive operation and both in
+time and memory.
+
+If you fix the test case so the MemoryStream is created with the
+correct capacity, and after updating from SVN, you'll get a
+performance that can be compared to the second test case.