рд╕реАрдПрд▓рдЖрд░ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдФрд░ рдЬреЗрдирд░рд┐рдХ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЬреЙрди рд╕реНрдХреАрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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


рдкреНрд░рддрд┐рдмрдВрдз рдирдпрд╛ ()


рдорд╛рди рд▓реАрдЬрд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ SteppedPattern рдЯрд╛рдЗрдк рд╣реИ (рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, Noda Time , рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджред), рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдЯрд╛рдЗрдк TBucket ред рдореИрдВ рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдореВрд▓реНрдп рдХреЛ TBucket , рдореИрдВ TBucket рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдЯреНрд╕ рдХреЛ рдПрдХ Bucket рдореЗрдВ рдвреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдкрд╛рд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ ParseResult рддрдХ ParseResult ред рддреЛ рд╣рд░ рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП TBucket рдХреА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рдо рдмрд┐рдирд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЯрд╛рдЗрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ new() рдмрд╛рдзрд╛ new TBucket() рдФрд░ new TBucket() рдХреЙрд▓ рдХрд░рддрд╛ new TBucket() ред

 // Somewhat simplified... internal sealed class SteppedPattern<TResult, TBucket> : IParsePattern<TResult>    where TBucket : new() {    public ParseResult<TResult> Parse(string value)   {       TBucket bucket = new TBucket();        // Rest of parsing goes here   } } 


рд╡рд╛рд╣! рдХрд╛рдлреА рд╕рд░рд▓ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдЦреЛ рджрд┐рдпрд╛ рдХрд┐ рдХреЛрдб рдХреА рдпрд╣ рдПрдХрд▓ рдкрдВрдХреНрддрд┐ рдЙрд╕ рд╕рдордп рдХрд╛ 75% рднрд╛рдЧ рд▓реЗрдЧреА рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд╛рд▓реА Bucket рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ - рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд░реНрдЧ рдЬреЛ рд╕рд░рд▓рддрдо рд░реЗрдЦрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ! рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛ рддреЛ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЭрдХрдЭреЛрд░ рджрд┐рдпрд╛ред

рд╣рдо рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ

рд╣рдорд╛рд░рд╛ рдлрд┐рдХреНрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдХреЛ рдХреИрд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреА рдорджрдж рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:
 // Somewhat simplified... internal sealed class SteppedPattern<TResult, TBucket> : IParsePattern<TResult> {    private readonly Func<TBucket> bucketProvider;    internal SteppedPattern(Func<TBucket> bucketProvider)   {        this.bucketProvider = bucketProvider;   }    public ParseResult<TResult> Parse(string value)   {       TBucket bucket = bucketProvider();        // Rest of parsing goes here   } } 


рдЕрдм рдореИрдВ new StoppedPattern(() => new OffsetBucket()) , рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдореИрдВ рдХреЙрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдХрднреА рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦреВрдВрдЧрд╛ред рдФрд░, рдмрд╛рдж рдХреЗ рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдХреЛ рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмрд╛рдж рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдмрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдореБрдЭреЗ рдЧреЛрд▓рд┐рдпрд╛рдБ рдЪрд╛рд╣рд┐рдП!

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рджрдо рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рдорд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдХреЗрд╡рд▓ рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпреЗ рдкрд░рд┐рдгрд╛рдо рдХрд┐рддрдиреЗ рдорд╣рддреНрд╡рд╣реАрди рд╣реЛрдВрдЧреЗ, рдореИрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд░реНрдЬ рдореВрд▓реНрдп рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдорд╛рдкрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, 100 рдорд┐рд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЧрдП, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдХреЛрдб рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВред

рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рджреЛ рд╕рдВрд░рдЪрдирд╛рдПрдВред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП - рдПрдХ рдЫреЛрдЯреЗ рдФрд░ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде (рдорддрд▓рдм, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, GAC рд▓рд┐рдП рдЫреЛрдЯреЗ рдФрд░ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдг, 85K рд╕реЗ рдЫреЛрдЯреЗ рдФрд░ рдмрдбрд╝реЗ), 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рдорд╢реАрдиреЛрдВ рдкрд░, CLR v2 , v4 рдХреЗ рд▓рд┐рдПред рдореЗрд░реА 64-рдмрд┐рдЯ рдорд╢реАрди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕реА рдорд╢реАрди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕реАрдПрд▓рдЖрд░ v4: 32-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо (рдПрдордПрд╕ рдкреНрд░рддрд┐ 100 рдорд┐рд▓рд┐рдпрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ)
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░рдирдпрд╛ () рдмрд╛рдзрд╛рдкреНрд░рджрд╛рддрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐
рдЫреЛрдЯреА рд╕рдВрд░рдЪрдирд╛6891225
рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛11,1887273
рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ163071690
рдмрдбрд╝рд╛ рд╡рд░реНрдЧ17,4713017


рд╕реАрдПрд▓рдЖрд░ v4: 64-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо (рдПрдордПрд╕ рдкреНрд░рддрд┐ 100 рдорд┐рд▓рд┐рдпрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ)
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░рдирдпрд╛ () рдмрд╛рдзрд╛рдкреНрд░рджрд╛рддрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐
рдЫреЛрдЯреА рд╕рдВрд░рдЪрдирд╛473868
рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛26702396
рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ83661189
рдмрдбрд╝рд╛ рд╡рд░реНрдЧ88051529


рд╕реАрдПрд▓рдЖрд░ рд╡реА 2: 32-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо (рдкреНрд░рддрд┐ 100 рдорд┐рд▓рд┐рдпрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдордПрд╕)
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░рдирдпрд╛ () рдмрд╛рдзрд╛рдкреНрд░рджрд╛рддрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐
рдЫреЛрдЯреА рд╕рдВрд░рдЪрдирд╛7031246
рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛114117392
рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ143,9671791
рдмрдбрд╝рд╛ рд╡рд░реНрдЧ143,1072581


рд╕реАрдПрд▓рдЖрд░ рд╡реА 2: 64-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо (рдкреНрд░рддрд┐ 100 рдорд┐рд▓рд┐рдпрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдордПрд╕)
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░рдирдпрд╛ () рдмрд╛рдзрд╛рдкреНрд░рджрд╛рддрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐
рдЫреЛрдЯреА рд╕рдВрд░рдЪрдирд╛510686
рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛23341731
рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ81,8011539
рдмрдбрд╝рд╛ рд╡рд░реНрдЧ83,2931896


рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред рдпреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ - рд╡реЗ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп new() рдЕрд╡рд░реЛрдз рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рд▓рдЧрднрдЧ 2 рдорд┐рдирдЯ рд▓реЗрддреЗ рд╣реИрдВред рдФрд░, рдЬреЛ рдиреЛрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпреЗ рдкрд░рд┐рдгрд╛рдо .Net 2.0 ( CLR рдЕрд░реНрде рд╣реИ, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдкрд╛рдардХ рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ .Net 3.5 рд╕рдм рдХреБрдЫ CLR v2 , .Net 2.0 рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдорд╢реАрди рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

"рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, new() рдЕрд╡рд░реЛрдз рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ IL рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрдВрдкрд╛рдЗрд▓рд░ Activator.CreateInstance [T] рдордВрдЧрд▓рд╛рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдирд┐рд░реНрдорд╛рддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдпрд╣ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдерд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдореБрджреНрджреЛрдВ рдкрд░ рдмрд╣рд╕ рдирд╣реАрдВ рдмрдврд╝рд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ, рдЙрдирдХрд╛ рд╕рдорд╛рдзрд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреИрд╢ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ред

рдореБрдЭреЗ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд╛рд╣рд┐рдП !!


(рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛)

рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐ рджреЗрдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЖрдк рдореЗрд░реА рд╕рд╛рдЗрдЯ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╡рд╣реА рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ Action рдбреЗрд▓рд┐рдЧреЗрдЯ рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ JIT рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рдХрд╣рддрд╛ рд╣реВрдВ: рдкрд╣рд▓реА рдмрд╛рд░, рдореИрдВ Int32 рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рджреВрд╕рд░рд╛, String ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛:


рдореИрдВ рд╕рднреА рдЕрдирд╕реБрд▓рдЭреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рднреА рдкреНрд░рдХрдЯ рдХрд░реВрдВрдЧрд╛:
  private static void NoOp() {} private static void NoOp<T>() {} private class ClassHolder<T> { internal static SampleGenericClass<T> SampleInstance = new SampleGenericClass<T>(); } private class SampleGenericClass<T> { internal static void NoOpStatic() { } internal void NoOpInstance() { } } 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ: Int32 рдФрд░ String ред рдФрд░, рдХреНрдпрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдХрд┐рд╕реА рднреА рдЪрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдлрд┐рд░ рд╕реЗ, рдкрд░рд┐рдгрд╛рдо 10 рдорд┐рд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ 100 рдорд┐рд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдкрд░ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг x64 JIT рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдХрд╕реМрдЯреАTestCase [int]TestCase [рд╕реНрдЯреНрд░рд┐рдВрдЧ]
рд▓реИрдВрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐18029,684
рдЬреЗрдиреЗрд░рд┐рдХ рдХреИрд╢ рдХреНрд▓рд╛рд╕90288
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рд╕рдореВрд╣ рд░реВрдкрд╛рдВрддрд░рдг18430017
рдЧреИрд░-рдЬреЗрдиреЗрд░рд┐рдХ рд╡рд┐рдзрд┐ рд╕рдореВрд╣ рд░реВрдкрд╛рдВрддрд░рдг178189
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдкрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐18029,276
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдкрд░ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐202299

рд╣рд╛рдВ, рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдирд╛ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 150 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ CLR рдЯреАрдо рдмреНрд▓реЙрдЧ рдкрд░ рдЬрд╡рд╛рдм рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ ...

рдирд┐рд╖реНрдХрд░реНрд╖


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

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

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


All Articles