{"push_id":1041859643,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"04569c541137efcdb84848555cbf038074a955d5","before":"587cbb77129c31e93c5b5ccbe03bb6c41dc5821c","commits":[{"sha":"f3587b43cedc781fe0d58dbc1cdb79259133a018","author":{"email":"69a47d9190b00e88484370f7bdccd9173c9239da@justinvp.com","name":"Justin Van Patten"},"message":"Avoid enumerator allocations inside KeyedCollection\n\nMethods on KeyedCollection<TKey, TItem> will internally loop over its\nItems using foreach before the dictionary threshold is reached. Items\nis a protected (non-virtual) property defined on the base\nCollection<T> class and typed as IList<T>. This means\nKeyedCollection<TKey, TValue> members like Contains and Item[TKey]\nallocate an enumerator when looping over Items.\n\nWe can avoid the enumerator allocations inside\nKeyedCollection<TKey, TValue> by providing a new private Items\nproperty that is typed as List<T>, so that List<T>'s struct\nenumerator is used, which also avoids interface dispatch.\n\nKeyedCollection<TKey, TItem>'s constructors call the default\nCollection<T> constructor which already initializes Items to\nan instance of List<T>, so this change is just being explicit\nabout the use of List<T> for Items.","distinct":true,"url":"https://api.github.com/repos/dotnet/coreclr/commits/f3587b43cedc781fe0d58dbc1cdb79259133a018"},{"sha":"04569c541137efcdb84848555cbf038074a955d5","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"Stephen Toub"},"message":"Merge pull request #2182 from justinvp/keyedcollection_enumallocs\n\nAvoid enumerator allocations inside KeyedCollection<TKey, TItem>","distinct":true,"url":"https://api.github.com/repos/dotnet/coreclr/commits/04569c541137efcdb84848555cbf038074a955d5"}]}