[Mono-list] List.FindAll method implementation
Miguel de Icaza
miguel at novell.com
Mon Mar 19 19:53:25 EDT 2007
Hey!
> is that really better than user a uint[] array? I have thinked in
> other solutions... I will test them later.
Well, basically you could use the same code path FindAllStackBits, but
you would have to change it like this:
List <T> FindAllStackBits (uint *bits, Predicate <T> match)
And you would have to pre-allocate bits in the caller:
if (size < 8*8*1024)
bits = stackalloc uint [n];
else
bits = (uint *) Marshal.AllocHGlobal (...);
That way it always uses a fast path, the only difference is that for
large memory blocks we use memory on the heap instead of using stack
memory.
Miguel
> JCO
>
> On 3/19/07, Miguel de Icaza < miguel at novell.com> wrote:
> Hello Juan,
>
> > Because there's no way to know the size of the stack in any
> moment in
> > time, Miguel suggested me to limit this new method to use
> only 8KB of
> > the stack... so it will be useful for list with 8 * 1024 * 8
> elements
> > or less. Bigger lists will use the old algorithm.
>
> I just had an idea: if the memory to be allocated is too
> large, instead
> of using stackalloc, you could use:
>
> using System.Runtime.InteropServices ;
>
> IntPtr Marshal.AllocHGlobal (size);
>
> and release it with:
>
> Marshal.FreeHGGlobal (IntPtr p);
>
> That way we could always use the fast mechanisms.
>
> > It also includes few testcases.
> >
> > Juan C. Olivares
> > www.juancri.com
> >
> > On 3/18/07, Juan C. Olivares < juancri at gmail.com> wrote:
> > I'll check...
> >
> > Juan Cristóbal Olivares
> >
> > www.juancri.com
> >
> > On 3/18/07, Miguel de Icaza <miguel at novell.com>
> wrote:
> > Hello,
> >
> > I feel a bit strange that the bools are
> allocated
> > using
> > numbers.Count but the loop uses this._items.
> I
> > rather keep them in
> > parallel.
> >
> > Also, another idea might be to use three
> code
> > paths depending on the
> > number of items:
> >
> > * [0,N] use bools.
> > * [N,M] use bitbools.
> > * [M,infinity] use the old method.
> >
> > Thread stacks could not be very large,
> and you
> > would like to avoid a
> > crash in that condition. Actually, I
> wonder if
> > stackalloc returns a
> > null if the requested size is larger than
> the
> > available stack.
> >
> > Miguel.
> >
> > > Attached.
> > >
> > > Juan C. Olivares
> > > www.juancri.com
> > >
> > > On 3/18/07, Miguel de Icaza <
> miguel at novell.com>
> > wrote:
> > > Hello,
> > >
> > > >
> > > > Do you have any comment?. I
> could send a
> > patch...
> > >
> > > These numbers look fantastic. We
> would
> > love to see a patch.
> > >
> > > > best regards
> > > >
> > > > Juan C. Olivares
> > > > www.juancri.com
> > > >
> > > >
> > > >
> > > >
> >
> _______________________________________________
> > > > Mono-list
> > maillist - Mono-list at lists.ximian.com
> > > >
> >
> http://lists.ximian.com/mailman/listinfo/mono-list
> > >
> > >
> > >
> _______________________________________________
> > > Mono-list maillist -
> Mono-list at lists.ximian.com
> > >
> http://lists.ximian.com/mailman/listinfo/mono-list
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>
>
>
> --
> Juan Cristóbal Olivares
More information about the Mono-list
mailing list