The improvement was very dramatic with moving to your code. I think I see why my code was so slow, I completely forgot about the boxing overhead. It makes quite a bit of difference.
Erick ----- Original Message ----- From: "Erick Thompson" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, May 03, 2002 5:24 PM Subject: Re: [DOTNET] Downloading a binary file using HttpWebResponse > Sean, > > Thanks for the code, this looks like it should be much faster. I may create > a strongly typed byte ArrayList, which would reduce the memory copies from > O(n) to O(log n), if I get enough time. > > Erick > > ----- Original Message ----- > From: "Sean Greer (SBI-Chico)" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Friday, May 03, 2002 4:13 PM > Subject: Re: [DOTNET] Downloading a binary file using HttpWebResponse > > > > Here's my stab at this problem...this is off the top of my head and has > not > > been thoroughly tested, but it does work against my pseudo web service. > :-) > > YMMV > > > > byte[] arrBuffer = new byte[0]; > > using(BinaryReader reader = new > > BinaryReader(webResponse.GetResponseStream())) > > { > > byte[] arrScratch = null; > > while((arrScratch = reader.ReadBytes(4096)).Length > 0) > > { > > if(arrBuffer.Length == 0) > > arrBuffer = arrScratch; > > else > > { > > byte[] arrTemp = new byte[arrBuffer.Length + > > arrScratch.Length]; > > Array.Copy(arrBuffer, arrTemp, arrBuffer.Length); > > Array.Copy(arrScratch, 0, arrTemp, > arrBuffer.Length, > > arrScratch.Length); > > arrBuffer = arrTemp; > > } > > } > > } > > // use arrBuffer now... > > > > HTH, > > > > Seang > > > > -----Original Message----- > > From: Erick Thompson [mailto:[EMAIL PROTECTED]] > > Sent: Friday, May 03, 2002 2:24 PM > > To: [EMAIL PROTECTED] > > Subject: [DOTNET] Downloading a binary file using HttpWebResponse > > > > > > I'm downloading binary files from the Stream returned by a HttpWebResponse > > object. The stream returned does not support seeking or look aheads. I > have > > no idea when the length of the stream will be > (HttpWebResponse.ContentLength > > cannot be trusted). What is the fastest way to get the stream into an > array > > of bytes? > > > > Below is the code that I'm using right now. It does work, but it's slow > and > > memory intensive (due to the ArrayList and the cast to a byte array). > There > > must be a better way. > > > > Thanks, > > Erick > > > > private void LoadBinaryContent(HttpWebResponse res) { > > Stream binStream = res.GetResponseStream(); > > BinaryReader reader = new BinaryReader(binStream); > > int len = (int)res.ContentLength; > > if (len == 0) { > > len = 100000; // make a guess > > } > > ArrayList tmp = new ArrayList(len); > > try { > > while (true) { > > tmp.Add(reader.ReadByte()); > > } > > } catch (EndOfStreamException) { > > byte b = 0; > > _binaryContent = (byte[])tmp.ToArray(b.GetType()); > > } > > reader.Close(); > > binStream.Close(); > > } > > > > You can read messages from the DOTNET archive, unsubscribe from DOTNET, or > > subscribe to other DevelopMentor lists at http://discuss.develop.com. > > > > You can read messages from the DOTNET archive, unsubscribe from DOTNET, or > > subscribe to other DevelopMentor lists at http://discuss.develop.com. > > You can read messages from the DOTNET archive, unsubscribe from DOTNET, or > subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.