Bug 58399 - Delegates as collection key are ~500x slower than previously
Summary: Delegates as collection key are ~500x slower than previously
Status: RESOLVED FIXED
Alias: None
Product: Class Libraries
Classification: Mono
Component: mscorlib (show other bugs)
Version: unspecified
Hardware: PC Windows
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2017-07-25 20:18 UTC by Jonathan Chambers
Modified: 2017-08-02 07:03 UTC (History)
4 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments
Test Case (1.16 KB, text/plain)
2017-07-25 20:18 UTC, Jonathan Chambers
Details

Description Jonathan Chambers 2017-07-25 20:18:47 UTC
Created attachment 23798 [details]
Test Case

Run attached test case:

MS: 800ms
Mono 5.0: 500ms
Mono 2.6: 1ms
Comment 1 Zoltan Varga 2017-07-25 20:33:39 UTC
This happens because delegates have the same hash code as their delegate type:

		public override int GetHashCode ()
		{
			/* same implementation as CoreCLR */
			return GetType ().GetHashCode ();
		}

So all the delegates end up in the same hash bucket. A workaround is to use a custom comparer which can provide its own hashcode.
Comment 2 Zoltan Varga 2017-08-01 14:00:00 UTC
https://github.com/mono/mono/pull/5296
Comment 3 Zoltan Varga 2017-08-02 07:03:29 UTC
Fixed in mono master a48bc439850869e565833d7fe6330c289beffe40.

Note You need to log in before you can comment on or make changes to this bug.