Dear Igniters,
Whilst checking out BenchmarkDotNet (thanks Pavel!) I came across this
issue [1]. There is some useful discussion in [2] under "Dictionary
vs IDictionary".
It seems that iterating collections via their interfaces has
performance implications, specifically that iterating interfaces can
cause unnecessary memory allocations and therefore GC, and the
MoveNext and Current functions being accessed by virtual interface
calls, rather than inlineable non-virtual calls.
As there are a number of instances of iterating collections via
interface in the Ignite.NET codebase, some of them in performance
critical areas like the Binary marshaller, perhaps we should
investigate changing those iterations to use the concrete types?
Regards
Mike
[1]
https://github.com/dotnet/coreclr/issues/1579[2]
http://mattwarren.org/2016/02/17/adventures-in-benchmarking-memory-allocations/