[Mono-bugs] [Bug 325495] arrays don' t appear to be implementing all the generic interfaces in 2.0

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Oct 3 07:50:44 EDT 2007


https://bugzilla.novell.com/show_bug.cgi?id=325495#c8





--- Comment #8 from Paolo Molaro <lupus at novell.com>  2007-10-03 05:50:43 MST ---
I implemented the interface offset sharing in my tree: this provides huge
memory savings (600-700+ KB of corlib metadata alone for ironpython/monodevelop
plus about the same in other memory allocations) and speedups even for the case
where we end up implementing all the needed interfaces (the ones the current
svn code misses). This is still not enough to run the anonarray.cs test case
because there is one more type involved that would need to have about the same
characteristics re implicit interfaces as the arrays: InternalEnumerator<T> in
System.Array.
This is the type of the object that is created when GetEnumerator<T> is called.
Now the twist is this: given a string[] array A you can end up calling
GetEnumerator<T> on it in several different ways, depending on how many
IEnumerable<T> interfaces the array exposes (which we know can be huge).

With the interface offsets sharing, we end up creating a single
GetEnumerator<string[]> method which returns an object which doesn't implement,
for example, IEnumerator<IEnumerable<string>>.
One solution to this problem is to not share offsets for the IEnumerable<T>
interfaces of arrays, but this reintroduces (even if to a lesser extent) the
explosive growth in memory usage and complexity.
The other solution is to do the same sharing and implicit interface
implementations we do on arrays also on InternalEnumerator<T>.


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list