рд▓реЛрдб рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реВ

рдЗрд╕ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдиреЛрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ рд▓реАрдб рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣рд╛рд▓рд┐рдпрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрдЫ рдЖрд╡реЗрджрдХ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрдВрддреНрд░ рд╣реИ, рд╢рдмреНрджрдХреЛрд╢ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рднреА рдмрд╣реБрдд рдХрдЯреНрдЯрд░рдкрдВрдереА рд░рд╛рдп рдореЗрдВ рдЖрдпрд╛: рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╢рдмреНрджрдХреЛрд╢ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЬрдм рдЗрд╕реЗ рддреБрд░рдВрдд рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ (LOH) рдХреЗ рдвреЗрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ LINQ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред !


рдмреЗрд╢рдХ, рдпреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдмрдпрд╛рди рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╖ рдмрд╣реБрдд рдмрд╛рд░ рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдХреЛрдб рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рджреЛрдиреЛрдВ рдХреА рдорд╛рдВрдЧ рдореЗрдВ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╢рдмреНрджрдХреЛрд╢ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ, рдпрд╣ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рдВрдЧрд╛ рд╣реИ, рдпрд╣ рдХрд┐рддрдиреЗ "рдирд┐рд╢рд╛рди" рд╣реИ рдпрд╣ рдкреАрдврд╝рд┐рдпреЛрдВ рдФрд░ LOH рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдкрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рднрд╛рд░ рдкреИрджрд╛ рд╣реЛрдЧрд╛; рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдЧреНрд░рд╣, рдЖрджрд┐ред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред


Microsoft рд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдХреЛ рдкрддрд╛ рд╣реИ, рд╣реИрд╢ рдЯреЗрдмрд▓ рддрдВрддреНрд░ рдкрд░ред рдпрд╣ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдирд┐рд░рдВрддрд░ рд╕реНрдерд┐рд░ рдЬрдЯрд┐рд▓рддрд╛ рдУ (1) рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ, рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИред рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХреЗ рд╕рд╛рде рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред


рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреЗ рджреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


    int[] _buckets = new int[size];
    Entry[] _entries = new Entry[size];

рдпреЗ рд╕рд░рдгрд┐рдпрд╛рдБ рдЙрдирдХреЗ рддреНрд╡рд░рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдбреЗрдЯрд╛ рдФрд░ рд╕реЗрд╡рд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИрдВред рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд╣реЛрддреЗ рд╣реИрдВред


рдПрдВрдЯреНрд░реА рд╣реЗрд▓реНрдкрд░ рдЗрдХрд╛рдИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреЛ рд▓рдкреЗрдЯрддреА рд╣реИ, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рд╣реИ:


    private struct Entry
    {
        public uint hashCode;
        public int next;
        public TKey key;
        public TValue value;
    }

, , , _entries. , ConcurrentDictionary, . ( 64 16 8 ) , .


_entries Dictionary 85000 LOH (, , 64 3372 , 1932). , , .


Microsoft _entries , Entry? LOH (, , ). , , .


, . 12 (4 _buckets 4 hashCode next Entry). , , , 12 . ? .


Dictionary . . Dictionary<int, int> ( ). , тАУ ( ). 500 . 13 . 500 .



, . , , , .


, _buckets _entries , ┬л┬╗, . LOH, .
, 746 3 .


, Dictionary . , , , .NET Core TrimExcess, .


:


  • , EnsureCapacity. .
  • , 400 10. (80 ). new Dictionary<int, int>(10001000), 190. , , .
  • , Dictionary EnsureCapacity(capacity*), . , _buckets _entries . . , EnsureCapacity(0).
  • , ( ) , , Dictionary: . , . , ( ).
  • TrimExcess. LOH . .

Dictionary. , Dictionary<Key, Value>, :


    public class Key
    {
        public int Item { get; set; }
        public Key(int item)
        {
            Item = item;
        }
        public override bool Equals(object obj)
        {
            return Item.Equals(obj);
        }
        public override int GetHashCode()
        {
            return Item.GetHashCode();
        }
    }
    public class Value
    {
        public int Item { get; set; }
        public Value(int item)
        {
            Item = item;
        }
    }

.



?


:


  • 64 (8 ) (8 ).
  • , , 8 ┬л┬╗ .
  • Item Key Value 8 , , Item 4 .

20 76 .


:


  • ( ), .
  • , . .

, . ? , ( 10-20-30 ) . ?


. , Dictionary<int, int>(int count) :


    struct Entry<TValue>
    {
        public int[] Keys;
        public TValue[] Values;
        public Entry(int count)
        {
            Keys = new int[count];
            Values = new TValue[count];
        }
        public bool TryGetValue(int key, out TValue value)
        {
            for (int j = 0; j < Keys.Length; ++j)
            {
                if (Keys[j] == key)
                {
                    value = Values[j];
                    return true;
                }
            }
            value = default(TValue);
            return false;
        }
    }

count тАУ -, .
.



, 18 count=10 134 count=190 ( 50 . ). ( тАУ 29 ), ( 150) , (, ).


, (, , Entry , ).
, (callvirt GetHashCode Equals). тАУ . , , , (generic) . .


SortedList<int, int>.
.



, .


: , . .


рдкреНрд░рд╕реНрддреБрдд рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд╣реЗрдб рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдзрд┐рдХ рд╣реИред
рдЯреЗрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред


All Articles