If you have an List<byte[]> and the list needs to expand, it should only copy 
the pointer to the byte[] object, which is cheap. I see no reason why it would 
do a deep copy. If it does do a deep copy, make the pointer explicit, e.g., 
List<*byte[]>. However, I don't believe you need to do this.

Erick

> -----Original Message-----
> From: Discussion of advanced .NET topics. 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> gregory young
> Sent: Thursday, July 06, 2006 2:50 PM
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: Re: [ADVANCED-DOTNET] trim byte array
> 
> An arraylist containing bytes would have far worse 
> performance (it also does doubling internally except now you 
> would be dealing with references instead of of single bytes). 
> A List<byte> also will do doubling internally (if you don't 
> set it large enough initially) but will do it dealing with a 
> byte [] internally (a memorystream will work in a similar 
> fashion). If you require fast random access this would 
> probably be the fastest. Another problem will exist in that 
> you would be dealing with large objects (they get garbage 
> colelcted differently) and this can actually open a DOS attack.
> 
> The best long term solution is probably to make smaller byte 
> arrays and link them together. This would be extremely good 
> if you are not changing data but simply appending to it. So 
> instead of managing an array that is 100 mb you hand 2000 
> smaller arrays.
> 
> Think for a minute about having an array chunks .. each chunk 
> is n bytes so ...
> 
> byte [][] chunks
> 
> You could calculate locations rather easily .. chunk = n / 
> chunksize then offset = a modulus n % chunksize. This would 
> allow you to continue adding items without ever having full 
> copy operations. I think someone has already mentioned a 
> similar strategy but this is the way to go. If you ran out of 
> initial chunks, you could easily resize this array (copying 
> 1000-2000 items as opposed to 10000000)
> 
> Cheers,
> 
> Greg
> 
> 
> On 7/6/06, dave wanta <[EMAIL PROTECTED]> wrote:
> >
> > Hi Erick,
> > hmm... this is interesting.
> >
> > I wouldn't have to worry about constantly expanding the byte array, 
> > and in this case I don't need to worry about accessing any internal 
> > bytes, just the end of the overall byte array to check for 
> terminating 
> > characters.
> >
> > (thinking out loud)
> > I wonder if even something quick and dirty of an ArrayList of byte 
> > arrays would work? Simply as a quick prototype?
> >
> > Cheers!
> > Dave
> >
> >
> > ----- Original Message -----
> > From: "Erick Thompson" <[EMAIL PROTECTED]>
> > To: <ADVANCED-DOTNET@DISCUSS.DEVELOP.COM>
> > Sent: Thursday, July 06, 2006 3:26 PM
> > Subject: Re: [ADVANCED-DOTNET] trim byte array
> >
> >
> > > It's the copy that gets pricey, which is going to be hard 
> to avoid 
> > > in
> > this
> > situation. A list just won't cut it with this size. I would 
> suggest a 
> > new class that uses a list of byte[], and then uses the 
> length of the 
> > internal byte array to determine the right array to touch in the 
> > indexer. I have to head out of the office, but I could 
> throw together 
> > some code later if you need me to. It makes random access 
> slower, but 
> > then you don't need to ever copy the data until the final step when 
> > you spit out the array, which should speed it up a lot.
> > >
> > > Erick
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Discussion of advanced .NET topics.
> > > > [mailto:[EMAIL PROTECTED] On Behalf 
> Of gregory 
> > > > young
> > > > Sent: Thursday, July 06, 2006 1:00 PM
> > > > To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> > > > Subject: Re: [ADVANCED-DOTNET] trim byte array
> > > >
> > > > Dave this is how list<byte> would work as well ... you 
> can however 
> > > > set an initial size if you know it to avoid these doublings.
> > > >
> > > > Cheers,
> > > >
> > > > Greg
> > > >
> > > >
> > > > On 7/6/06, dave wanta <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > Hi all,
> > > > >
> > > > > btw, just fyi...if you Reflector a MemoryStream, it 
> doubles it's 
> > > > > internal buffer every time it exceeds it's length.
> > > > >
> > > > > The MemoryStream is really clean from a programmatic
> > > > standpoint, it's
> > > > > just not the performance I really want.
> > > > >
> > > > > Thanks for all the suggestions guys!  I really appreciate it.
> > > > >
> > > > > Cheers!
> > > > > Dave
> > > > >
> > > > > ===================================
> > > > > This list is hosted by DevelopMentor   http://www.develop.com
> > > > >
> > > > > View archives and manage your subscription(s) at 
> > > > > http://discuss.develop.com
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > If knowledge can create problems, it is not through 
> ignorance that 
> > > > we can solve them.
> > > >
> > > > Isaac Asimov
> > > >
> > >
> >
> > ===================================
> > This list is hosted by DevelopMentor   http://www.develop.com
> >
> > View archives and manage your subscription(s) at 
> > http://discuss.develop.com
> >
> 
> 
> 
> --
> If knowledge can create problems, it is not through ignorance 
> that we can solve them.
> 
> Isaac Asimov
> 

Reply via email to