рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ .NET рд╕реЗрд╡рд╛ рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдЕрдиреБрдХреВрд▓рди

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



рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред C / C ++ рдпрд╛ Rust рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдореИрдиреНрдпреБрдЕрд▓ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдзрд┐рдХ рд╕рдордп рдХреЛрдб рд▓рд┐рдЦрдиреЗ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдмрд┐рддрд╛рддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдореЗрдореЛрд░реА рдХреЗ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдмрдЧ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛, рд╕реА #, рдкрд╛рдпрдерди, рд░реВрдмреА, рдЧреЛ, рдкреАрдПрдЪрдкреА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЖрджрд┐ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ - рдЙрди рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдордп рдирдЧрдгреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рд╣реИ рдФрд░ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рддреАрд╡реНрд░рддрд╛ рдмрдврд╝рддреА рд╣реИ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдкрд╛рдЗрд░рд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ 'рджреБрдирд┐рдпрд╛ рдХреЛ рд░реЛрдХреЗрдВ' рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╕рдордп, рд╡реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВред рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз (рдкреГрд╖реНрдарднреВрдорд┐) рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреЛ рд░реЛрдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдПред рдереНрд░реЗрдб рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореМрдЬреВрджрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлреНрд░реАрдЬ рдХрд░рддрд╛ рд╣реИ, рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдордп рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реАрдзреЗ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЪрд┐рдд рдХрддрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдореАрдЯреНрд░рд┐рдХ "рдзреАрдореЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд" рдмрд┐рдЧрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреБрд╕реНрддрдХ рдХреЛрдирд░рд╛рдб рдХреЛрдХреЛрд╕рд╛: рдкреНрд░реЛ .NET рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ (рд╣рдо 2 рджрд┐рдиреЛрдВ рдореЗрдВ рд░реВрд╕ рдореЗрдВ рдЗрд╕рдХреА рдкрд╣рд▓реА рдкреНрд░рддрд┐ рдХреИрд╕реЗ рд▓рд╛рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдкреВрд░реА рддрд░рд╣ рд╕реЗ .NET рдореЗрдВ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рдорд╛рдк


рдкрд╛рдЗрд░рд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╡реНрдпреВ рдпреВрдЯрд┐рд▓рд┐рдЯреА ( https://github.com/Microsoft/perfview ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдВрдбреЛрдЬ (рдИрдЯреАрдбрдмреНрд▓реНрдпреВ) рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдПрдХ рдореБрдХрд╛рдмрд▓рд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдкреНрд░рднрд╛рд╡ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдФрд░ рдХрд┐рд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХреБрдЫ рднреА рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЖрд╡реЗрджрди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PerfView рдХреЛ рдпрд╛ рддреЛ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

/ GCCollectOnly рдкреИрд░рд╛рдореАрдЯрд░ (рдЯреНрд░реЗрд╕ рд╕рдордп 1.5 рдШрдВрдЯреЗ) рдХреЗ рд╕рд╛рде PerfView рдЯреНрд░реЗрд╕ рдЪрд▓рд╛рдПрдВред рдЗрд╕ рдореЛрдб рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИред рдЖрдЗрдП рдореЗрдореЛрд░реА рдЧреНрд░реБрдк / GCStats рдЯреНрд░реЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦреЗрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢:



рдпрд╣рд╛рдБ рд╣рдо рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдХреЗрддрдХ рдПрдХ рд╕рд╛рде рджреЗрдЦрддреЗ рд╣реИрдВ:
  • рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ рдФрд╕рдд рдмрд┐рд▓реНрдб рдкреЙрдЬрд╝ рд╕рдордп 700 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╣реИ, рдФрд░ рдЕрдзрд┐рдХрддрдо рдард╣рд░рд╛рд╡ рд▓рдЧрднрдЧ рдПрдХ рд╕реЗрдХрдВрдб рд╣реИред рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдЙрд╕ рд╕рдордп рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдЯреЙрдк рдореЗрдВ рд╕рднреА рдереНрд░реЗрдбреНрд╕, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдкреЙрдЬрд╝ рд╕рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
  • рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рдкреАрдврд╝реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рдпрд╣ 0 рд╡реАрдВ рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдереЛрдбрд╝реА рдХрдо рд╣реИред
  • рдкреНрд░реЗрд░рд┐рдд рдХреЙрд▓рдо рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ 53 рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЗрд░рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ GC.Collect () рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдПрдХ рднреА рдХреЙрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рд╣реИред

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

рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рдХрд╛ рдбреЗрдЯрд╛ GCStats рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



рдпрд╣рд╛рдВ рдХреБрдЫ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдмрдбрд╝реА рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (.NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ> 85,000 рдмрд╛рдЗрдЯреНрд╕ рдЖрдХрд╛рд░ рдореЗрдВ LOH - рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ), рдФрд░ рдЗрд╕реЗ 2 рдбреА рдЕрд╕реЗрдВрдмрд▓реА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдмрдВрдЯрдХ рдХреЗ рдпреЗ рдард╣рд░рд╛рд╡ рдЙрддрдиреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рддрдиреЗ рдХрд┐ рдХреВрдбрд╝реЗ рдХреЗ рдвреЗрд░ рдХреЗ рдХрд╛рд░рдг, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 4.6.1 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 4.7.1 рдореЗрдВ Microsoft рдиреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛, рдЕрдм рдпрд╣ рдЖрдкрдХреЛ рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: https://docs.microsoft.com / рдЖрд░рдпреВ-рдЖрд░рдпреВ / рдбреЙрдЯрдиреЗрдЯ / рдлреНрд░реЗрдорд╡рд░реНрдХ / рд╡реНрд╣рд╛рдЯреНрд╕-рдиреНрдпреВ / # рд╕рд╛рдорд╛рдиреНрдп-рднрд╛рд╖рд╛-рд░рдирдЯрд╛рдЗрдо-рдХреНрд▓рд░
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрд╕ рд╕рдордп рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 4.7.2 рдореЗрдВ рдЙрдиреНрдирдд рд╣реБрдПред

рджреВрд╕рд░реА рдкреАрдврд╝реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг


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



рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдореЗрдореЛрд░реА рд▓реАрдХ рдирд╣реАрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╕реЗ рд╣реЛрддреА рд╣реИрдВред рдЕрдЧрд▓реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдЯреНрд░реИрдлрд╝рд┐рдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдпрд╛рдиреА, рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рд▓реЛрдЧ рд╡рд╣рд╛рдВ рдорд░ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП PerfView рдореЗрдВ рдПрдХ / GCOnly рдореЛрдб рд╣реИред рдЯреНрд░реЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ, рдЖрдЗрдП 'рдЬрдирд░рд▓ 2 рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдереНрд╕ (рдореЛрдЯреЗ рдирдореВрдиреЗ) рд╕реНрдЯреИрдХреНрд╕' рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ рдорд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдВ рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЧрдП рдереЗред рдпрд╣рд╛рдБ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:



рд▓рд╛рдЗрди рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдВрджрд░ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдХреЙрд▓ рд╕реНрдЯреИрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ 2 рдЬрдирд░реЗрд╢рди рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рд╣реИрдВ:
  • System.Byte [] рдЕрдЧрд░ рдЖрдк рдЕрдВрджрд░ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ JSON рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдмрдлрд╝рд░ рд╣реИрдВ:



  • рд╕реНрд▓реЙрдЯ [System.Int32] [] (рдпрд╣ рд╣реИрд╢рд╕реЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ), System.Int32 [], рдЖрджрд┐ред рдпрд╣ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ - рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ, рд░реВрдкреЛрдВ, рд╕реВрдЪрд┐рдпреЛрдВ, рдорд┐рддреНрд░реЛрдВ, рдЗрддреНрдпрд╛рджрд┐ рдХреЛ, рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЙрд╕рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╢реНрдб рд╣реИрдВ:





рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, JSON рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреИрд╢ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдмрдлрд╝рд░ рд╕рднреА рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдкрд░ рд░рд╣рддреЗ рд╣реИрдВред рд╡реЗ рджреВрд╕рд░реА рдкреАрдврд╝реА рддрдХ рдХреНрдпреЛрдВ рд░рд╣рддреЗ рд╣реИрдВ? рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВред рдФрд░ рдЖрдХрд╛рд░> 85000 рдмрд╛рдЗрдЯреНрд╕ рдкрд░, рдЙрдирдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ 2 рд╡реАрдВ рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИред

рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ / GCOnly рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ 'GC Heap Alloc Ignore Free (рдореЛрдЯреЗ рдирдореВрдиреЗ) рд╕реНрдЯреИрдХ' рдЕрдиреБрднрд╛рдЧ рдЦреЛрд▓реЗрдВред рд╡рд╣рд╛рдВ рд╣рдо рд▓рд╛рд░реНрдЬрдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЗрди рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рдлреНрдпреВрд╡реНрдпреВ рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрджрд░ рд╣рдо рд╕рднреА рд╕рдорд╛рди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ред рд╣рдо рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдХрдИ рдЕрд╕реНрдерд╛рдпреА рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред





рдкрд╛рдЗрд░рд╕ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди


рдорд╛рдк рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА: рдЬреЗрдиреНрд╕рди рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреИрд╢ рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
  • рд╕рдмрд╕реЗ рдмрдбрд╝реА рдмрд╛рдд рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдмрдбрд╝реЗ рдмрдлрд░ рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдП-> рдмреА-> рд╕реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрднреА-рдХрднреА рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдП-> рд╕реА рдореЗрдВ рдмрджрд▓рдХрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реАред
  • рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреВрд▓ред рд▓рдЧрд╛рддрд╛рд░ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ, рд╣рдо рдореБрдлреНрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рд╣рдореЗрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреВрд▓ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╛ рдкреВрд▓ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг .NET рдХреЛрд░ рдореЗрдВ ArrayPool рд╣реИ, рдЬреЛ рдХрд┐ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ System.Buffers Nugger рдкреИрдХреЗрдЬ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред
  • рдмрдбрд╝реЗ рдХреЗ рдмрдЬрд╛рдп рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдХреНрд▓рд╛рдЗрдВрдЯ рдХреИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдФрд░ JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ред

рдЧреНрд░рд╛рд╣рдХ рдХреИрд╢ рдЧрдгрдирд╛


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

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

рдЖрдЗрдП рд╣рдо рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
  • рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреВрд░реНрдг рдирд┐рдкрдЯрд╛рдиред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рд╕реЗрдЯ рдХреА рдЫрдВрдЯрд╛рдИ рдФрд░ рд╕рдВрдШ рдХреЗ рдмреАрдЪ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд╝рд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ:
    • рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдФрд░ рдЙрдирдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░: рд╣реИрд╢рд╕реЗрдЯ, рд╕реВрдЪреА рдФрд░ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдж рдХреЗ 2 рдХреЛ рд╕рдВрдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред Int32, Int64, рд╕рд╛рде рд╣реА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдПрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
    • рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдХрдард┐рди рдЬреАрд╡рди рд╕рдордпред рдкреВрд▓ рд╕реЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдмрдбрд╝реА рд╡рд╕реНрддреБрдПрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдпрд╛рддреНрд░рд╛ рдХрд░рддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐ред
    • рдмреЛрдзред Microsoft рд╕реЗ ArrayPool рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рд╕реВрдЪреА рдФрд░ HashSet рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  • рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧред рдПрдХ рдмрдбрд╝реЗ рд╕рд░рдгреА рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди 0 рд╡реАрдВ рдкреАрдврд╝реА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ 1 рдФрд░ 2 рдореЗрдВ рдорд╛рдирдХ рдкрде рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ 2 рд╡реЗрдВ рддрдХ рдирд╣реАрдВ рд░рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ 0 рд╡реЗрдВ рд╕реНрдерд╛рди рдкрд░ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ 1 рдкреАрдврд╝реА рдореЗрдВ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдиреНрдпреВрдирддрдо рд╣реИрдВред рдХрдард┐рдирд╛рдИ:
    • рдмреЛрдзред рд╣рдореЗрдВ рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрдиреА рд╣реЛрдВрдЧреАред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХрдореА рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп "рд╕рдВрдЧреНрд░рд╣ рдЬреЛ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ" рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреАрд░реНрдг рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред

рд╣рдордиреЗ 3 рд░рд╛рд╕реНрддреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд▓рд┐рд╕реНрдЯ рдФрд░ рд╣реИрд╢рд╕реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛, рди рдХрд┐ рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЯреБрдХрдбрд╝рд╛ рд╕реВрдЪреА


рд╣рдорд╛рд░рд╛ ChunkedList <T> IList <T> рд╕рд╣рд┐рдд рдорд╛рдирдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рдВ, рдФрд░ рдиреНрдпреВрдЯрдирд╕реЙрдлреНрдЯ.рдЬреЙрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ IEnumerable <T> рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

public sealed class ChunkedList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T> { 

рдорд╛рдирдХ рд╕реВрдЪреА <T> рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рд╣реИрдВ: рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдФрд░ рднрд░реЗ рд╣реБрдП рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред ChunkedList рдореЗрдВ <T> рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЕрдВрддрд┐рдо рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред 85,000 рд╕реЗ рдХрдо рдмрд╛рдЗрдЯ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рд░рдгреА:


 private T[][] chunks; private int currentChunk; private int currentChunkSize; 

рдЪреВрдВрдХрд┐ ChunkedList <T> рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓ рд╣реИ, рд╣рдордиреЗ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗред рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХрд╛ рдХрдо рд╕реЗ рдХрдо 2 рдореЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: "рдЫреЛрдЯреА" рдореЗрдВ рдЬрдм рдкреВрд░реА рд╕реВрдЪреА рдПрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ 85,000 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИ, рдФрд░ "рдмрдбрд╝реА" рдЬрдм рдЗрд╕рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛрдбрд╝реЗрдВ), рдкрд░рд┐рджреГрд╢реНрдп рдФрд░ рднреА рдмрдбрд╝реЗ рд╣реИрдВ: "рдЫреЛрдЯрд╛" -> "рдЫреЛрдЯрд╛", "рдЫреЛрдЯрд╛" -> "рдмрдбрд╝рд╛", "рдмрдбрд╝рд╛" -> "рдмрдбрд╝рд╛", "рдмрдбрд╝рд╛" -> " рдЫреЛрдЯрд╛ рд╣реИред " рдпрд╣рд╛рдВ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрдорд╛ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

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

рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХрдбреЙрдЯрдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрд╛ рдХрд┐ рд╕реВрдЪреА <T> рд╕реЗ ChunkedList <T> рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЖрдЗрдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ:

 [Benchmark] public ChunkedList<int> ChunkedList() { var list = new ChunkedList<int>(); for (int i = 0; i < N; i++) list.Add(i); return list; } 

рдФрд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдгред 500 рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо (рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ):
рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDevрдЬрдирд░рд▓ 0 / 1k рдУрдкреАрдЬрдирд░рд▓ 1 / 1k OpрдЬрдирд░рд▓ 2 / 1k OpрдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА / рдСрдк
StandardList1.415 рд╣рдореЗрдВ0.0149 рд╣рдореЗрдВ0.0140 рд╣рдореЗрдВ0.68470.0095-4.21 рдХреЗрдмреА
ChunkedList3.728 рд╣рдореЗрдВ0.0238 рд╣рдореЗрдВрд╣рдореЗрдВ 0.02220.69430.0076-рек.реи рдХреЗрдмреА

50,000 рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо (рдХрдИ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд):
рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDevрдЬрдирд░рд▓ 0 / 1k рдУрдкреАрдЬрдирд░рд▓ 1 / 1k OpрдЬрдирд░рд▓ 2 / 1k OpрдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА / рдСрдк
StandardListрд╣рдореЗрдВ 146.2733.1466 рд╣рдореЗрдВ4.8053 рд╣рдореЗрдВ124.7559124.7559124.7559513.23 рдХреЗрдмреА
ChunkedList287.687 рд╣рдореЗрдВ1.4630 рд╣рдореЗрдВ1.2969 рд╣рдореЗрдВ41.503920.5078-256.75 рдХреЗрдмреА

рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реНрддрдВрднреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг
 BenchmarkDotNet=v0.11.4, OS=Windows 10.0.17763.379 (1809/October2018Update/Redstone5) Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3324.0 DefaultJob : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3324.0 // * Hints * Outliers ListAdd.StandardList: Default -> 2 outliers were removed ListAdd.ChunkedList: Default -> 1 outlier was removed // * Legends * Mean : Arithmetic mean of all measurements Error : Half of 99.9% confidence interval StdDev : Standard deviation of all measurements Gen 0/1k Op : GC Generation 0 collects per 1k Operations Gen 1/1k Op : GC Generation 1 collects per 1k Operations Gen 2/1k Op : GC Generation 2 collects per 1k Operations Allocated Memory/Op : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B) 1 us : 1 Microsecond (0.000001 sec) 


рдпрджрд┐ рдЖрдк 'рдФрд╕рдд' рдХреЙрд▓рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдФрд╕рдд рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдирдХ рд╕реЗ рдХреЗрд╡рд▓ 2-2.5 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдХреЗрд╡рд▓ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдпрд╣ рдЕрдВрддрд░ рдирдЧрдгреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЙрд▓рдо 'Gen 2 / 1k op' (1000 рдЯреЗрд╕реНрдЯ рд░рди рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ: рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде, ChunkedList рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ рдХрдЪрд░рд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рд╣реИред

рдЯреБрдХрдбрд╝рд╛ рд╕реЗрдЯ


рдЗрд╕реА рддрд░рд╣, ChunkedHashSet <T> ISet <T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред ChunkedHashSet <T> рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╣рдордиреЗ ChunkedList рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЫреЛрдЯреЗ рдЪрдВрдХ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ MIT рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз .NET рд╕рдВрджрд░реНрдн рд╕реНрд░реЛрдд рд╕реЗ HashSet <T> рдХрд╛ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕рдореЗрдВ ChunkedLists рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред

рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рд╣рдо рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрд╕реА рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо ChunkedHashSet рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддреБрд▓рдирд╛ <T> рдХреЗ рд╕рдВрджрд░реНрдн HashSet <T> рд╕реЗ рдХрд░реЗрдВрдЧреЗред

рдЕрдВрдд рдореЗрдВ, рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдгред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореБрдЦреНрдп рдСрдкрд░реЗрд╢рди рд╕реЗрдЯ рдХрд╛ рд╕рдВрдШ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

 public ChunkedHashSet<int> ChunkedHashSet(int[][] source) { var set = new ChunkedHashSet<int>(); foreach (var arr in source) set.UnionWith(arr); return set; } 

рдФрд░ рдорд╛рдирдХ рд╣реИрд╢рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдгред рдЫреЛрдЯреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг:

 var source = new int[][] { Enumerable.Range(0, 300).ToArray(), Enumerable.Range(100, 600).ToArray(), Enumerable.Range(300, 1000).ToArray(), } 

рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDevрдЬрдирд░рд▓ 0 / 1k рдУрдкреАрдЬрдирд░рд▓ 1 / 1k OpрдЬрдирд░рд▓ 2 / 1k OpрдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА / рдСрдк
StandardHashSet30.16 рд╣рдореЗрдВ0.1046 рд╣рдореЗрдВ0.0979 рд╣рдореЗрдВ9.30791.6785-57.41 рдХреЗрдмреА
ChunkedHashSet73.54 рд╣рдореЗрдВ0.5919 рд╣рдореЗрдВ0.5247 рд╣рдореЗрдВ9.52151.5869-58.84 рдХреЗрдмреА

рдмрдбрд╝реЗ рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ:

 var source = new int[][] { Enumerable.Range(0, 30000).ToArray(), Enumerable.Range(10000, 60000).ToArray(), Enumerable.Range(30000, 100000).ToArray(), } 

рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDevрдЬрдирд░рд▓ 0 / 1k рдУрдкреАрдЬрдирд░рд▓ 1 / 1k OpрдЬрдирд░рд▓ 2 / 1k OpрдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА / рдСрдк
StandardHashSet3,031.30 рд╣рдореЗрдВ32.0797 рд╣рдореЗрдВ28.4378 рд╣рдореЗрдВ699.2188667.9688664.06254718.23 рдХреЗрдмреА
ChunkedHashSet7,189.66 рд╣рдореЗрдВ25.6319 рд╣рдореЗрдВ23.9761 рд╣рдореЗрдВ539.0625265.62507.81253280.71 рдХреЗрдмреА

рдкрд░рд┐рдгрд╛рдо рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред ChunkedHashSet 2-2.5 рдЧреБрдирд╛ рддрдХ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрдбрд╝реЗ рд╕реЗрдЯ рдкрд░ рдпрд╣ 2 рдкреАрдврд╝реА рдХреЗ 2 рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХрдо рдкрд░рд┐рдорд╛рдг рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

JSON рдореЗрдВ рд╕реАрд░рд┐рдпрд▓рд▓рд╛рдЗрдЬрд╝реЗрд╢рди


рдкрд╛рдЗрд░рд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрдИ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдмреЙрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдкреАрдЖрдИ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдпреВрдЯрд┐рд▓рд┐рдЯреА рдореЗрдВ рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЦреЛрдЬ рдХреА (рдмрд╛рдж рдореЗрдВ рдкрдмреНрд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ https://habr.com/en/post/227595/ , рдЕрдиреБрднрд╛рдЧ 2 рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдЕрдбрд╝рдЪрди рдХрд╣рд╛рдВ рд╣реИред " рдпрд╣реА рд╣реИ, рдореБрдЦреНрдп рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреАред

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

рдХрд░реАрдм рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд░ рдмрдирд╛рддреЗ рд╣реИрдВ ('рд╕рд╛рдордЧреНрд░реА' UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ JSON рдпреБрдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ):

 var serializer = Newtonsoft.Json.JsonSerializer.Create(...); byte[] content; var sw = new StreamWriter(new MemoryStream(), new UTF8Encoding(false)); using (var writer = new Newtonsoft.Json.JsonTextWriter(sw)) { serializer.Serialize(writer, result); writer.Flush(); content = ms.ToArray(); } 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдбрдмреНрд▓реНрдпреВрд╕реАрдПрдл рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рдорд╛рдирдХ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдПрдХрд▓ 'рдмрд╛рдЗрдирд░реА' рддрддреНрд╡ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдмреЗрд╕ 64 рдореЗрдВ JSON рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 public class RawBodyWriter : BodyWriter { private readonly byte[] _content; public RawBodyWriter(byte[] content) : base(true) { _content = content; } protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { writer.WriteStartElement("Binary"); writer.WriteBase64(_content, 0, _content.Length); writer.WriteEndElement(); } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред JSON рдХреЛ XmlWriter рдмрдлрд░ рдХреЛ рддреБрд░рдВрдд рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ WCF рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЙрдбрд╝рдиреЗ рдкрд░ рдмреЗрд╕ 64 рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдВрдЧреЗ:

 protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { var serializer = Newtonsoft.Json.JsonSerializer.Create(...); writer.WriteStartElement("Binary"); Stream stream = new Base64Writer(writer); Var sw = new StreamWriter(stream, new UTF8Encoding(false)); using (var jsonWriter = new Newtonsoft.Json.JsonTextWriter(sw)) { serializer.Serialize(jsonWriter, _result); jsonWriter.Flush(); } writer.WriteEndElement(); } 

рдпрд╣рд╛рдБ Base64Writer XmlWriter рдкрд░ рдПрдХ рд╕рд░рд▓ рдЖрд╡рд░рдг рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ Base64 рдХреЗ рд░реВрдк рдореЗрдВ XmlWriter рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдкреВрд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд▓рд┐рдЦрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдЯреНрд░реАрдорд╡рд┐рдЯрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 public class Base64Writer : Stream { private readonly XmlWriter _writer; public Base64Writer(XmlWriter writer) { _writer = writer; } public override void Write(byte[] buffer, int offset, int count) { _writer.WriteBase64(buffer, offset, count); } <...> } 

рдкреНрд░реЗрд░рд┐рдд рдЬреА.рд╕реА.


рдЖрдЗрдП рд░рд╣рд╕реНрдпрдордп рдкреНрд░реЗрд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣рдордиреЗ GC.Collect рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ 10 рдмрд╛рд░ рд░реАрдЪреЗрдХ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдореИрдВ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ PerfView рдореЗрдВ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдХреЙрд▓ рд╕реНрдЯреИрдХ рдмрд╣реБрдд рд╕реВрдЪрдХ рдирд╣реАрдВ рд╣реИ (DotNETRuntime / GC / рдЯреНрд░рд┐рдЧрд░ рдШрдЯрдирд╛):



рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реБрд░рд╛рдЧ рд╣реИ - рдкреНрд░реЗрд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдкрд╣рд▓реЗ RecycleLimitMonitor.RaiseRecycleLimitEvent рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдЖрдЗрдП рдХреЙрд▓ рдХреЗ рдвреЗрд░ рдХреЛ RaiseRecycleLimitEvent рд╡рд┐рдзрд┐ рд╕реЗ рджреЗрдЦреЗрдВ:

 RecycleLimitMonitor.RaiseRecycleLimitEvent(...) RecycleLimitMonitor.RecycleLimitMonitorSingleton.AlertProxyMonitors(...) RecycleLimitMonitor.RecycleLimitMonitorSingleton.CollectInfrequently(...) RecycleLimitMonitor.RecycleLimitMonitorSingleton.PBytesMonitorThread(...) 

рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ:
  • RecycleLimitMonitor.RecycleLimitMonitorSingleton рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдПрдХ рдЯрд╛рдЗрдорд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ PBytesMonitorThread рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • PBytesMonitorTread рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдБрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдХрд▓реЗрдХреНрдЯ рдЗрдирдХреНрд╡рд╛рдпрд░реЗрдХреНрдЯрд▓реА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • CollectInfrequently AlertProxyMonitors рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдмреВрд▓ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ GC.Collect () рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╕рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдЕрдВрддрд┐рдо рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЛ рджрд┐рдП рдЧрдП рд╕рдордп рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • AlertProxyMonitors, IIS рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реА RecycleLimitMonitor рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИ, рдФрд░ RaiseRecycleLimitEvent рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • RaiseRecycleLimitEvent IObserver <RecycleLimitInfo> рд╕реВрдЪреА рдЙрдард╛рддреА рд╣реИред рд╣реИрдВрдбрд▓рд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ RecycleLimitInfo рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ RequestGC рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдкреНрд░реЗрд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИред


рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ IObserver <RecycleLimitInfo> рд╣реИрдВрдбрд▓рд░ рдХреЛ RecycleLimitMonitor.Subscribe () рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ AspNetMemoryMonitor.Subscribe () рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ IObserver <RecycleLimitInfo> рд╣реИрдВрдбрд▓рд░ (RecycleLimitObserver рд╡рд░реНрдЧ) рдХреЛ AspNetMemoryMonitor рд╡рд░реНрдЧ рдореЗрдВ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ ASP.NET рдХреИрд╢ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред

рдкреНрд░реЗрд░рд┐рдд рдЬреАрд╕реА рдХреА рдкрд╣реЗрд▓реА рд▓рдЧрднрдЧ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдпрд╣ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╛рдХреА рд╣реИред RecycleLimitMonitor IIS рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдирд┐рдЬреА рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛), рдФрд░ рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдпрд╣ RaiseRecycleLimitEvent рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд▓реНрдХрд┐ рднреНрд░рд╛рдордХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред AspNetMemoryMonitor.ProcessPStreetBytesLimit рдХрд╛ рдорд╛рди рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ:
  • рдпрджрд┐ IIS рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рдХреЛ 'рдирд┐рдЬреА рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ (KB)' рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдореЗрдВ рдорд╛рди рд╡рд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЕрдиреНрдпрдерд╛, 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, 60% рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рд▓реА рдЬрд╛рддреА рд╣реИ (32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рддрд░реНрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ)ред

рдЬрд╛рдВрдЪ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ: ASP.NET рдЕрдкрдиреА рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЗ рдкрд╛рд╕ рд╣реИ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред 'рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ (KB)' рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП ASP.NET 60% рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рддрдХ рд╕реАрдорд┐рдд рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдореБрдЦреМрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдореБрдлреНрдд рдореЗрдореЛрд░реА рджрд┐рдЦрд╛рддрд╛ рдерд╛ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЧрд╛рдпрдм рдерд╛ред рд╣рдордиреЗ IIS рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ 'рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ (KB)' рдореВрд▓реНрдп рдХреЛ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреЗ 80% рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ ASP.NET рдХреЛ рдЕрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ '.NET CLR рдореЗрдореЛрд░реА / # рдкреНрд░реЗрд░рд┐рдд GC' рдХреЗ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдЕрдЧрд▓реА рдмрд╛рд░ ASP.NET рдХреЛ рдпрд╛рдж рди рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рд╕реАрдорд╛ рдХреЗ рдирд┐рдХрдЯ рд╣реИред

рдмрд╛рд░-рдмрд╛рд░ рдорд╛рдк


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реБрдЖред рдЪрд▓реЛ perfview / GCCollectOnly (рдЯреНрд░реЗрд╕ рд╕рдордп - 1 рдШрдВрдЯреЗ) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, GCStats рд░рд┐рдкреЛрд░реНрдЯ:



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рдЕрдм 0 рдФрд░ 1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЫреЛрдЯреЗ рдкрд░рд┐рдорд╛рдг рдХреЗ 2 рдСрд░реНрдбрд░ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдЗрди рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХрд╛ рд╕рдордп рднреА рдШрдЯ рдЧрдпрд╛ред рдкреНрд░реЗрд░рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рдЕрдм рдирд╣реАрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИрдВред рдЖрдЗрдП рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ:



рдЬрдирд░рд▓ рдХреЙрд▓рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╕рднреА рдЕрд╕реЗрдВрдмрд▓реА рдкреГрд╖реНрдарднреВрдорд┐ рдмрди рдЧрдИ рд╣реИрдВ ('2 рдмреА' рдХрд╛ рдЕрд░реНрде рд╣реИ 2 рд╡реАрдВ рдкреАрдврд╝реА, рдкреГрд╖реНрдарднреВрдорд┐)ред рдпрд╣реА рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреЙрд▓рдо 'рдкреЙрдЬрд╝ рдПрдордПрд╕рдХреЗ')ред рдЖрдЗрдП рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рд░реБрдХреЗрдВ:



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕ рддрд░рд╣ рдХреЗ рдард╣рд░рд╛рд╡ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдлреА рдЧрд┐рд░рд╛рд╡рдЯ рдЖрдИред

рдкрд░рд┐рдгрд╛рдо


рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрд╡рдзрд┐ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдореИрдВ рдкреНрд░реЗрд░рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрдирд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред 0 рдФрд░ рдкрд╣рд▓реА рдкреАрдврд╝реА рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдФрд╕рдд рдЕрд╡рдзрд┐ рдХрдо рд╣реЛ рдЧрдИ (~ 200 рдПрдордПрд╕ рд╕реЗ ~ 60 рдПрдордПрд╕ рддрдХ)ред 0 рдФрд░ 1 рдкреАрдврд╝реА рдХреА рдЕрдзрд┐рдХрддрдо рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЕрд╡рдзрд┐ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реА рдкреАрдврд╝реА рдХреА рдЕрд╕реЗрдВрдмрд▓рд┐рдпрд╛рдБ рддреЗрдЬрд╝ рд╣реЛ рдЧрдИрдВ, 1000 рдХрд┐рд▓реЛрдореАрдЯрд░ рддрдХ рдХреЗ рд▓рдВрдмреЗ рдард╣рд░рд╛рд╡ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓реЗ рдЧрдПред

рдкреНрд░рдореБрдЦ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ - "рдзреАрдореА рдХреНрд╡реЗрд░реА рдХрд╛ рдкреНрд░рддрд┐рд╢рдд", рдпрд╣ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж 40% рддрдХ рдХрдо рд╣реЛ рдЧрдпрд╛ред

рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╕реНрдореГрддрд┐ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░рдВрддрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЬрд╝реИрдмрд┐рдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдкрддрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдмрдврд╝рд╛ рдкреНрд░рд╡рд╛рд╣, рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛, рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдмрдЧ):
рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░рд╡рд┐рд╡рд░рдгрдХрдм рдзреНрдпрд╛рди рджреЗрдирд╛ рд╣реИ
\ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (*) \ рдирд┐рдЬреА рдмрд╛рдЗрдЯреНрд╕рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛рдореВрд▓реНрдп рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдПрдХ рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЕрдзрд┐рдХрддрдо рджреИрдирд┐рдХ рдорд╛рдиреЛрдВ рд╕реЗ 2 рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
\ .NET рд╕реАрдПрд▓рдЖрд░ рдореЗрдореЛрд░реА (*) \ # рдЬрдирд░рд▓ 2 рд╕рдВрдЧреНрд░рд╣рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛
\ .NET рд╕реАрдПрд▓рдЖрд░ рдореЗрдореЛрд░реА (*) \ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдЖрдХрд╛рд░рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛
\ .NET CLR рдореЗрдореЛрд░реА (*) рдЬреАрд╕реА рдореЗрдВ%%рд╕рдордп рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдХрдЪрд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛рдорд╛рди 5% рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
\ .NET CLR рдореЗрдореЛрд░реА (*) \ # рдкреНрд░реЗрд░рд┐рдд рдЬреАрд╕реАрдкреНрд░реЗрд░рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдорд╛рди 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

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


All Articles