C # рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛

рдореИрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реА # рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2008 рдФрд░ .Net рдлреНрд░реЗрдорд╡рд░реНрдХ 3.5.1 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рднрд╛рд╖рд╛ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдереЗ:
1. рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ 16 рд╡рд░реНрдгреЛрдВ (рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА) рдФрд░ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди, 4 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗ рдорд┐рд▓рдХрд░ 100 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рддрдХ;
2. рдЬрд▓реНрджреА рд╕реЗ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдвреВрдВрдвреЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред



рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 1 рдХрд╛ рд╕рдорд╛рдзрд╛рдиред рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реНрдерд╛рдиред



рдЪрд▓реЛ рдкреЛрд╕реНрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ 24 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдкреВрд░реЗ рдбреЗрдЯрд╛ рдРрд░реЗ рдХреЛ рд▓рдЧрднрдЧ 2.4 рдЬреАрдмреА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдо 1024 рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╕рдЯреАрдХ рдкреБрдирд░реНрдЧрдгрдирд╛ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреЗрдВрдЧреЗ)ред рдпрд╣рд╛рдВ рдкрд╣рд▓реА рдкрд░реЗрд╢рд╛рдиреА рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ: x32 рдкрд░, рд╡рд┐рдВрдбреЛрдЬ рдУрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ 2 рдЬреАрдмреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, .Net рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдорд╛рди рдФрд░ рднреА рдХрдо рд╣реИ, рдореИрдВ 1.8 рдЬреАрдмреА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╣реАрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдЬрдЧрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ x64 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╣реА рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрднреА рднреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП x32 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдХреА рд╣рд▓рдЪрд▓ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдкреЗрди (рдорд╛рдЙрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб) рд▓реЗрдВ рдФрд░ рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЙрд╕реЗ рддреБрд░рдВрдд рдЧрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдо рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ:

public class Entry { public string Key; public int IntValue1; public int IntValue2; } 


Int alias рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ Int32 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ x32 рдФрд░ x64 рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рд╣рдо рдПрдХ рд╕рд░рд▓ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ 10 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ:

 public Entry[] Entries = new Entry[10000000]; private void btnCreate_Click(object sender, EventArgs e) { int i; for (i = 0; i < Entries.Length; i++) { Entries[i] = new Entry() {Key = i.ToString("0000000000000000")}; } GC.Collect(); var msg = string.Format("Created {0}, Memory {1}", i.ToString("0,0"), GC.GetTotalMemory(true).ToString("0,0")); lbLog.Items.Add(msg); } 


рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рд▓рдЧрднрдЧ 760 рдПрдордмреА (x32) рдФрд░ 1040 рдПрдордмреА (x64) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛, рдЕрд░реНрдерд╛рддред рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ 76/104 рдмреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 24 рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ 100 рдорд┐рд▓рд┐рдпрди 7.6 / 10.4 рдЬреАрдмреА рд▓реЗрдВрдЧреЗ!

52/80 рдмреА рдХреНрдпрд╛ рд▓рд┐рдпрд╛? рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВ: .Net рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрд░реЗрдЦрдгред рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рдпрд╣рд╛рдБ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рд╣рдо рд▓рд┐рдВрдХ рдкрд░ 8/16 рдмреА рдФрд░ рдПрдХ рдФрд░ 4/8 рдмреА рдЦреЛ рджреЗрддреЗ рд╣реИрдВ (рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╣рдорд╛рд░реА рд╕рд░рдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ)ред рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреА рдЬрдЧрд╣ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

 public struct Entry ... 


рдорд╛рдк рдиреЗ рдкреНрд░рддрд┐ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ 64/80 рдмреА рдХреА рд▓рд╛рдЧрдд рдХреЛ рджрд┐рдЦрд╛рдпрд╛ред рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдордиреЗ 12/24 рдмреА рдХреЛ рдмрдЪрд╛рдпрд╛ред рд╕рдВрд░рдЪрдирд╛ рд╡реИрд▓реНрдпреВ рдЯрд╛рдЗрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдпрдВ рдорд╛рди рд╣реИрдВред рдпрд╣ рд╕рд╣реА рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ 4/8 рдмреА рдмрдЪрд╛рдпрд╛ рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реА рдХреБрдЫ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдХреБрдВрдЬреА рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕ рдкрд░, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдмрд╣реБрдд рдХреБрдЫ рдЦреЛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдЫреЗрдж рдЦреЛрджрд╛ - рдпрджрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдореБрдХреНрдд рдореЗрдореЛрд░реА рд╣реИ, рддреЛ рднреА рд╡рд┐рдЦрдВрдбрди рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдХреЛрдИ рдареЛрд╕ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореИрдВрдиреЗ 500 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рдВрдЯрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 2 рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдм рд╕рдВрд░рдЪрдирд╛ рдХреА рдХреНрд▓реЛрдирд┐рдВрдЧ рдкрд░ рдЦреЛ рджреЗрдВрдЧреЗ, рдФрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп - рдкреИрдХреЗрдЬрд┐рдВрдЧ / рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ (рдмреЙрдХреНрд╕рд┐рдВрдЧ / рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ) рдкрд░ред рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреБрдВрдЬреА рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦреЗрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреБрд░рдВрдд рд░рд┐рдХреЙрд░реНрдб рдкрд░ 12/24 рдмреА рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЗрди рдмрд╣реБрдд рднрд╛рд░реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд▓рдВрдмрд╛рдИ 16 рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдХрд░, рд╣рдо рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреНрд╖реЗрддреНрд░ 56/72 рдмреА рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВред рдХреБрд▓:
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП: 8 (рджреЛ ints) + 56/72 (рдХреБрдВрдЬреА) +12/24 (рдХрдХреНрд╖рд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ + рд▓рд┐рдВрдХ) = 76/103 рдмреАред
рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП: 8 (рджреЛ рдЗрдВрдЯ) + 56/72 (рдХреБрдВрдЬреА) = 64/80 рдмреАред

рдЖрдЗрдП рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЛ char [] рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ 8 рдмреА рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд░рдгреА рднреА рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рдмрдЪрдд рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЧрдарди рдкрд░, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЪрд╛рд░ рд╕рд░рдгреА рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдпреВрдирд┐рдХреЛрдб рд╣реИ рдФрд░ 2 рдмрд╛рдЗрдЯреНрд╕ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрдореГрддрд┐ рд╕рдВрд░реЗрдЦрдг рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЗрдВрдЯ 32 рдмреЙрд░реНрдбрд░ рдкрд░ред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдПрдВрдЯреНрд░реА рдХреНрд▓рд╛рд╕ / рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдХреНрд╖реЗрддреНрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреБрдВрдЬреА рдПрдХ рд▓рд┐рдВрдХ рд╣реИ)ред рдЖрдк StructLayout рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдХрд░ рдФрд░ Marshal.SizeOf (рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ ()) рдкреИрдорд╛рдЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо int рдХреЗ рдмрдЬрд╛рдп рдЯрд╛рдЗрдк рдмрд╛рдЗрдЯ рдХрд╛ рдПрдХ рднреА рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░рдгреА рдкрд░ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдо PackL Property рдХреЛ StructLayout рдореЗрдВ рд╕реЗрдЯ рдХрд░ рджреЗрдВред рд╕рдВрд░рдЪрдирд╛ рдХреЛ 1 рдмрд╛рдЗрдЯ рдХреА рд╕реАрдорд╛ рдкрд░ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдкреИрдХрд┐рдВрдЧ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддрд╛рд░ / рд╡рд░реНрдгреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рднреА рдпрд╣рд╛рдБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдЯреНрд░рдХреНрдЪрд╛рдЗрд▓рдЖрдЙрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЪрд╛рд░рд╕реЗрдЯ = рдЪрд╛рд░рд╕реЗрдЯ.рдПрдПрдирдПрд╕рдЖрдИ рдХрд╛ рдореВрд▓реНрдп рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рди рддреЛ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ []ред

рдЗрд╕рд▓рд┐рдП, рдлрд┐рд▓рд╣рд╛рд▓ рд╣рдордиреЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкрд░ 20/32 B рдмрдЪрд╛ рд▓рд┐рдпрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧреИрд░-рдпреВрдирд┐рдХреЛрдб рдирд╣реАрдВ рдереА, рдпрд╣ рдЪрд╛рд░ [] рдХреЗ рдмрдЬрд╛рдп рдмрд╛рдЗрдЯ [] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдПрдХ рдФрд░ 16 рдмреА рдмрдЪрд╛рдУред рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдЕрдм рд╕рд░рдгреА рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП 40/56 рдмреАред рдЕрдзрд┐рд╢реЗрд╖ - 16/32 рдмреА рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ .Net рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░ рдмрдлрд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддрд╛ рд╣реИ:

 private unsafe fixed byte _key[16]; 


рдпрд╣рд╛рдВ, рдЕрдВрдд рдореЗрдВ, рд╣рдо 100% рддрд░реНрдХрд╕рдВрдЧрддрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рд╣рдорд╛рд░рд╛ рд░рд┐рдХреЙрд░реНрдб рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ 24 рдмреА рд▓реЗрддрд╛ рд╣реИред X32 рдкрд░ рд╣рдо рд▓рдЧрднрдЧ 75 рдорд┐рд▓рд┐рдпрди (1.8 рдЬреАрдмреА) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, x64 рдкрд░ рд╕рднреА 100 рдорд┐рд▓рд┐рдпрди (2.4 рдЬреАрдмреА)ред X64 рдкрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреЗ рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдЖрдк рдЗрд╕ рдЦреБрд╢реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдлрд┐рдХреНрд╕реНрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣рд╛рд░ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрд┐рддрдирд╛ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореИрдВрдиреЗ рдорд╛рдк рдирд╣реАрдВ рд▓рд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред

рд╣рдо рдзреВрдореНрд░рдкрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 2 рдХрд╛ рд╕рдорд╛рдзрд╛рдиред рддреНрд╡рд░рд┐рдд рдкрд╣реБрдБрдЪред



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

- рдкреНрд░рддрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ 8 рдмреА рд╕реЗ рдЕрдзрд┐рдХ:
 [StructLayout(LayoutKind.Sequential)] private struct Entry { public int hashCode; public int next; public TKey key; public TValue value; } 

рд╣рдо рд╣реИрд╢рдХреЛрдб рдФрд░ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХреЗ рд╕рдВрдЧрдарди (рднрдВрдбрд╛рд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рднрдВрдбрд╛рд░рдг рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рд╡реИрд╕реЗ, рд╣рдореЗрдВ рджреЛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдПред

- рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ:
 private Entry<TKey, TValue>[] entries; 

рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдмреНрд▓реЙрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рддреАрд╡реНрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред

- рд╣реИрд╢ рдЦрдВрдб рдХреНрд╖рдорддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВ):
 private void Initialize(int capacity) { тАж num = HashHelpers.GetPrime(capacity); this.buckets = new int[num]; тАж 


- рднрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЖрдХрд╛рд░ рджреЛ рд╕реЗ рдХрдо-рд╕реЗ-рдХрдо рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рд╣реИрд╢ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдЗрд╕ рдЖрдХрд╛рд░ рдореЗрдВ рдлрд┐рдЯ рдХрд░рдирд╛ рдФрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд┐рд╣рд╛ рдХрд░рдирд╛:
 private unsafe void Resize() { тАж num = HashHelpers.GetPrime(this.count * 2); numArray = new int[num]; тАж entryArray = new Entry<TKey, TValue>[num]; тАж this.buckets = numArray; this.entries = entryArray; } 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рдм рдХрд┐рд╕ рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдорд┐рд▓рд┐рдпрди рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛрд╣рд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд░реНрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

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

рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рдВрдЧрдарди рдкрд░ рд╕реНрдореГрддрд┐ рдХрд┐рддрдирд╛ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ:
- рд╣реИрд╢ рдЦрдВрдб = рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рд╕рд░рдгреА (рд╣реИрд╢ рдЦрдВрдб рдЖрдХрд╛рд░ * 4/8 рдмреА);
- рд╕реВрдЪреА рдЙрджрд╛рд╣рд░рдг = рд╡рд░реНрдЧ рдЕрд╡рд╕рдВрд░рдЪрдирд╛ + рд╕реВрдЪреА рдХреНрд╖реЗрддреНрд░ (рд╣реИрд╢ рдЦрдВрдб рдЖрдХрд╛рд░ * (8/16_1/44))ред
рдХреБрд▓, 1 рдорд┐рд▓рд┐рдпрди рдХреЗ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рдЧрднрдЧ 40/68 рдПрдордмреА рдЦрд░реНрдЪ рдХрд░реЗрдВрдЧреЗред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╢реИрдВрдкреЗрди рдкреАрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА:

- рдЬреИрд╕реЗ рдорд╛рдирдХ рд╢рдмреНрджрдХреЛрд╢ рджреЛрд╣рд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ:
 private void EnsureCapacity(int min) { тАж num = (((int) this._items.Length) == null) ? 4 : (((int) this._items.Length) * 2); тАж 


- рдЕрддреНрдпрдзрд┐рдХ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди 0.1 рд╡реЙрд▓реНрдпреВрдо рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
 public void TrimExcess() { int num; num = (int) (((double) ((int) this._items.Length)) * 0.9); if (this._size >= num) { goto Label_002A; } this.Capacity = this._size; Label_002A: return; } 


- рдареАрдХ рд╣реИ, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдпрд╣ (рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП) рдХреНрд╖реЗрддреНрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░рд░реНрдердХ рд╣реИ:
 public class List... { private const int _defaultCapacity = 4; private static T[] _emptyArray; private T[] _items; private int _size; [NonSerialized] private object _syncRoot; private int _version; ... 


рдореБрдЭреЗ рдЕрдкрдиреА рд╕реВрдЪреА рд▓рд┐рдЦрдиреА рдереА, рдХрд╕реНрдЯрдо рд▓реАрдирд┐рдпрд░ рдЧреНрд░реЛрде рдХреЗ рд╕рд╛рде, рдореЗрдореЛрд░реА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛ рдФрд░ _syncRoot рдФрд░ _version рдлрд╝реАрд▓реНрдбреНрд╕ рдореЗрдВ 8 B рдХреА рдмрдЪрдд рдХрд░рдирд╛ред рдЖрдк рдЗрд╕реЗ 12 B рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реБрдП, рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдм рдХреБрдЫ, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ - рд╣рдо рд╢реИрдВрдкреЗрди рдкреАрддреЗ рд╣реИрдВ!

рдФрд░ рдереЛрдбрд╝рд╛ рдЕрднреНрдпрд╛рд╕


рдкреАрд╕реА рдХреЛрд░ 2 рдХреНрд╡рд╛рдб Q9400 @ 2.66, рд░реИрдо 4 рдЬреАрдмреА, рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2008 рдЖрд░ 2 рд╕реНрдЯреИрдВрдбрд░реНрдб x64

рд╣реИрд╢ рдЦрдВрдб 1 рдорд┐рд▓рд┐рдпрди, рд╕реВрдЪреА рд╡рд┐рдХрд╛рд╕ 25ред
100 рдорд┐рд▓реАрд▓реАрдЯрд░ рднрд░рдирд╛ред 5 рдорд┐рдирдЯ 50 рд╕реЗрдХрдВрдбред рдореЗрдореЛрд░реА 2.46 рдЬреАрдмреА, рдЪреЛрдЯреА 3.36 рдЬреАрдмреАред
рд╕рд╛рдВрдЦреНрдпрд┐рдХреА: 100% рднрд░рдг, рдиреНрдпреВрдирддрдо 56 рд╢реНрд░реГрдВрдЦрд▓рд╛, рдЕрдзрд┐рдХрддрдо 152, рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди 10ред
рдмрд╛рд╣реНрдп 100 рдорд┐рд▓рд┐рдпрди 4 рдорд┐рдирдЯ 10 рд╕реЗрдХрдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ 100 рдорд┐рд▓рд┐рдпрди рдХреА рддреБрд▓рдирд╛ред

рд╣реИрд╢ рдЦрдВрдб 2 рдорд┐рд▓рд┐рдпрди, рд╕реВрдЪреА рд╡рд┐рдХрд╛рд╕ 20ред
100 рдорд┐рд▓реАрд▓реАрдЯрд░ рднрд░рдирд╛ред 4 рдорд┐рдирдЯ 43 рд╕реЗрдХрдВрдбред рдореЗрдореЛрд░реА 2.53 рдЬреАрдмреА, рдЪреЛрдЯреА 3.57 рдЬреАрдмреАред
рд╕рд╛рдВрдЦреНрдпрд┐рдХреА: 100% рднрд░рдиреЗ, рдиреНрдпреВрдирддрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ 20, рдЕрдзрд┐рдХрддрдо 89, рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди 7ред
рдмрд╛рд╣реНрдп 100 рдорд┐рд▓рд┐рдпрди 2 рдорд┐рдирдЯ 56 рд╕реЗрдХрдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ 100 рдорд┐рд▓рд┐рдпрди рдХреА рддреБрд▓рдирд╛ред

рдПрдХ рдЫреЛрдЯреА рдЯрд┐рдкреНрдкрдгреА: .Net рд╕реНрдореГрддрд┐ рдХреЛ рддреБрд░рдВрдд рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рд╣реЛред рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрдореЛрд░реА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд░рд╣рддреА рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореЗрдореЛрд░реА рдХреА рддреАрд╡реНрд░ рдХрдореА (рд╕рдВрднрд╡рдд: рдХреБрдЫ рдЕрдиреНрдп рдорд╛рдирджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛) рд╣реЛрдиреЗ рдкрд░ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрднрд╡ рдЕрдиреБрдХреВрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

Source: https://habr.com/ru/post/In114495/


All Articles