{"id":484163,"date":"2026-06-18T16:54:15","date_gmt":"2026-06-18T16:54:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=484163"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=484163","title":{"rendered":"\u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435: \u043e\u0445\u043e\u0442\u0430 \u043d\u0430 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432 .NET 10"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0421\u0430\u043c\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445. \u0412\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 <\/em><code><em>struct<\/em><\/code><em> \u0440\u0430\u0434\u0438 zero-allocation, \u043f\u0440\u043e\u0448\u043b\u0438 code review, \u0430 \u0432 \u043f\u0440\u043e\u0434\u0435 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0438\u0434\u0443\u0442 \u043a\u043e\u0441\u044f\u043a\u043e\u043c. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u043e\u043d \u043c\u043e\u043b\u0447\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 value-\u0442\u0438\u043f \u0432 \u043a\u0443\u0447\u0443 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u2014 \u0430 \u043d\u0430 \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e.<\/em><\/p>\n<blockquote>\n<p><strong>TL;DR.<\/strong> \u0411\u043e\u043a\u0441\u0438\u043d\u0433 (boxing) \u0432 .NET \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>object o = 42<\/code>. \u041e\u043d \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430 <code>struct<\/code>, \u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u043c <code>ValueType.Equals<\/code>, \u0432 <code>params object[]<\/code>-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0432 <code>foreach<\/code> \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0438 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u044c \u201c\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u201d \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0433\u0430\u0439\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0443\u0436\u0435 <strong>\u043d\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442<\/strong> \u2014 JIT \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0438\u0445 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c, \u0438 \u0441\u043b\u0435\u043f\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u044b \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u0434\u043d\u043e. \u041d\u0438\u0436\u0435 \u2014 \u043a\u0430\u0440\u0442\u0430 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0436\u0438\u0432\u0451\u0442 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0443\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438-\u043a\u0435\u0439\u0441, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u043d\u0430 <code>BenchmarkDotNet<\/code> \u0441 <code>MemoryDiagnoser<\/code>, \u0441\u043f\u043e\u0441\u043e\u0431 \u043b\u043e\u0432\u0438\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 <code>DOTNET_JitDisasm<\/code> \u0438 <code>dotnet-gcdump<\/code>, \u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>\u041e \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0438 \u0447\u0438\u0441\u043b\u0430\u0445.<\/strong> \u0412\u0441\u0451 \u043f\u0440\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u043d\u0430 .NET 10 (\u0442\u0435\u043a\u0443\u0449\u0438\u0439 LTS) \u0438 C# 13\/14-\u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, Release, \u0431\u0435\u0437 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, <code>BenchmarkDotNet<\/code> \u0441 <code>MemoryDiagnoser<\/code>. \u041d\u0430 .NET 8\/9 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435, \u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 JIT \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0441\u0442\u0430\u0442\u044c\u0438: <strong>\u043d\u0435 \u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u0435), \u0433\u043e\u043d\u044f\u0439\u0442\u0435 <\/strong><code><strong>MemoryDiagnoser<\/strong><\/code><strong> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430.<\/strong> \u0427\u0438\u0441\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u043d\u0438\u0436\u0435 \u2014 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0430 \u043d\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430.<\/p>\n<\/blockquote>\n<h3>\u041f\u0440\u043e\u043b\u043e\u0433: \u201c\u0443 \u043d\u0430\u0441 \u0436\u0435 \u0432\u0441\u0451 \u043d\u0430 struct, \u043e\u0442\u043a\u0443\u0434\u0430 Gen0?\u201d<\/h3>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 <code>readonly struct<\/code>-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e <code>new<\/code>, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 hot path. \u041f\u043e \u0437\u0430\u0434\u0443\u043c\u043a\u0435 \u2014 \u043d\u043e\u043b\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u041d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435 \u2014 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<\/p>\n<p>\u041f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438, \u043d\u043e \u0441\u0442\u0435\u043a \u0432\u0435\u0434\u0451\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434, \u0433\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e <code>new<\/code>. \u0422\u0430\u043c \u0446\u0438\u043a\u043b \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u043f\u0430\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>.Equals()<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <code>params<\/code>-\u043c\u0435\u0442\u043e\u0434 \u043b\u043e\u0433\u0430. \u0413\u043b\u0430\u0437\u0430\u043c\u0438 \u2014 \u0447\u0438\u0441\u0442\u043e. \u0412 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u2014 <code>box<\/code>-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C# \u0438 JIT \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0432\u0430\u0448 <code>struct<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u0443\u0447\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043a\u043e\u0434\u0430 value-\u0442\u0438\u043f \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439. \u0421\u0438\u043c\u043f\u0442\u043e\u043c \u2014 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u201c\u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430\u201d, \u0438 \u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u043d\u0438 \u0432 code review, \u043d\u0438 \u0432 \u0434\u0430\u043c\u043f\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 IL \u0438\u043b\u0438 \u0434\u0438\u0437\u0430\u0441\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043c\u0430 \u0431\u043b\u0438\u0437\u043a\u0430 &#8212; \u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043f\u043e C# \u0438 .NET (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441, \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c) \u0432 \u0441\u0432\u043e\u0451\u043c Telegram-\u043a\u0430\u043d\u0430\u043b\u0435: <a href=\"https:\/\/t.me\/+mXTlkulY7dc2NWEy\" rel=\"noopener noreferrer nofollow\">t.me\/csharp_ci<\/a>. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0440\u043e\u0433\u043e<\/h3>\n<p>\u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 value-\u0442\u0438\u043f\u0430 (<code>struct<\/code>, <code>enum<\/code>, \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432) \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043a\u0443\u0447\u0435. \u0420\u0430\u043d\u0442\u0430\u0439\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443. \u0410\u043d\u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u2014 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0442\u0438\u043f\u0430.<\/p>\n<p>\u0426\u0435\u043d\u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u0445: \u043a\u0430\u0436\u0434\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u2014 \u044d\u0442\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432 Gen0. \u041c\u043d\u043e\u0433\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0447\u0430\u0441\u0442\u044b\u0435 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043f\u0430\u0443\u0437\u044b (\u043f\u0443\u0441\u0442\u044c \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435), \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043a\u044d\u0448\u0430 \u0438 \u043e\u0431\u0449\u0438\u0439 \u0440\u043e\u0441\u0442 CPU \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0441 SLA \u043f\u043e p99 \u044d\u0442\u043e \u0431\u044c\u0451\u0442 \u043f\u043e \u0445\u0432\u043e\u0441\u0442\u0443 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u043b\u0438\u0448\u043d\u044f\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p>\u0412 IL \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432\u0438\u0434\u0435\u043d \u044f\u0432\u043d\u043e \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>box<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u0435\u0451 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c.<\/p>\n<h3>\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430: \u0433\u0434\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0435\u0441\u0442\u044c, \u0430 \u0433\u0434\u0435 \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435\u0442<\/h3>\n<p>\u0421\u0432\u043e\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u044d\u043a\u0440\u0430\u043d \u2014 \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0438\u0436\u0435. \u041a\u043e\u043b\u043e\u043d\u043a\u0430 \u201c\u0421\u0435\u0439\u0447\u0430\u0441\u201d \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 .NET 10 \u0432 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u0441\u0435\u0439\u0447\u0430\u0441?<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043a \u043f\u043e\u0439\u043c\u0430\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0435\u043c \u043b\u0435\u0447\u0438\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>struct<\/code> \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>box<\/code> \u0432 IL, <code>Allocated<\/code> &gt; 0<\/p>\n<\/td>\n<td>\n<p align=\"left\">generic <code>where T : struct, I<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>foreach<\/code> \u043f\u043e <code>IEnumerable&lt;T&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong> (enumerator)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>MemoryDiagnoser<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \/ \u0438\u043d\u0434\u0435\u043a\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>struct<\/code> \u0432 <code>HashSet<\/code>\/<code>Dictionary<\/code> \u0431\u0435\u0437 <code>IEquatable&lt;T&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">gcdump: boxed-\u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>IEquatable&lt;T&gt;<\/code> \/ <code>record struct<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>params object[]<\/code> \u0441 value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>box<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>[LoggerMessage]<\/code>, \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u044f\u043c\u0431\u0434\u0430 \u0441 \u0437\u0430\u0445\u0432\u0430\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \/ <code>this<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430 (closure-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">gcdump: <code>&lt;&gt;c__DisplayClass<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>static<\/code>-\u043b\u044f\u043c\u0431\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Enum.HasFlag<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0435\u0442<\/strong> (\u0441 .NET Core 2.1)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0438\u0437\u0430\u0441\u043c: \u0447\u0438\u0441\u0442\u0430\u044f \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f <code>$\"x={i}\"<\/code> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0435\u0442<\/strong> (C# 10+)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0438\u0437\u0430\u0441\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Generic-\u043c\u0435\u0442\u043e\u0434 \u0441\u043e <code>struct<\/code>-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0435\u0442<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041a\u0430\u0440\u0442\u0430 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0438 \u043d\u0430 .NET 10<\/h3>\n<p>\u041c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 <code>struct<\/code> \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e <code>(object)<\/code> \u0438 \u0433\u0434\u0435 \u044d\u0442\u043e <strong>\u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/strong> \u0434\u0430\u0436\u0435 \u043d\u0430 \u0441\u0432\u0435\u0436\u0435\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432, \u0430 \u043d\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438.<\/p>\n<h4>1. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430 struct \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/h4>\n<pre><code>public interface IShape { double Area(); }public struct Circle : IShape{    public double R;    public double Area() =&gt; Math.PI * R * R;}\/\/ \u0411\u043e\u043a\u0441\u0438\u043d\u0433: Circle \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 IShape \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438.IShape s = new Circle { R = 2 };double a = s.Area();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e <code>struct<\/code> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043e\u043d \u0431\u043e\u043a\u0441\u0438\u0442\u0441\u044f \u2014 \u0432\u0435\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439. \u0412\u044b\u0437\u043e\u0432 <code>s.Area()<\/code> \u0438\u0434\u0451\u0442 \u0443\u0436\u0435 \u043f\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0435 <code>Circle<\/code> \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 <code>Area()<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u2014 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u043d\u0435\u0442. \u0413\u0440\u0430\u0431\u043b\u0438 \u0432\u044b\u043b\u0435\u0437\u0430\u044e\u0442, \u043a\u043e\u0433\u0434\u0430 <code>struct<\/code> \u201c\u043f\u0440\u044f\u0447\u0443\u0442\u201d \u0437\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0434\u0438 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430.<\/p>\n<p><strong>\u041b\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong> generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 <code>where T : struct, IShape<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 JIT \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 \u043f\u043e value-\u0442\u0438\u043f\u0443 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0435\u0437 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438.<\/p>\n<h4>2. foreach \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/h4>\n<pre><code>\/\/ List&lt;int&gt;.Enumerator \u2014 struct. \u041d\u043e \u0447\u0435\u0440\u0435\u0437 IEnumerable&lt;int&gt;\/\/ \u043e\u043d \u0431\u043e\u043a\u0441\u0438\u0442\u0441\u044f: foreach \u0434\u0451\u0440\u0433\u0430\u0435\u0442 IEnumerator&lt;int&gt;.MoveNext().IEnumerable&lt;int&gt; numbers = new List&lt;int&gt; { 1, 2, 3 };foreach (var n in numbers) { \/* ... *\/ }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>List&lt;T&gt;<\/code> \u043e\u0442\u0434\u0430\u0451\u0442 <code>struct<\/code>-\u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0442\u043e\u0440, \u0438 <code>foreach<\/code> \u043f\u043e <code>List&lt;T&gt;<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043a <code>IEnumerable&lt;T&gt;<\/code> \u2014 \u0438 <code>foreach<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0431\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430: \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>IEnumerable&lt;T&gt;<\/code> \u201c\u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438\u201d \u0438 \u0442\u0435\u0440\u044f\u0435\u0442 zero-alloc \u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<p><strong>\u041b\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong> \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f (<code>List&lt;T&gt;<\/code>, \u043c\u0430\u0441\u0441\u0438\u0432) \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0439\u0442\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443. \u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f generic-\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430.<\/p>\n<h4>3. \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u044b \u0438 Equals \u043d\u0430 struct<\/h4>\n<pre><code>public struct Point { public int X, Y; }\/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c IEquatable&lt;Point&gt;,\/\/ EqualityComparer&lt;Point&gt;.Default \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 ValueType.Equals\/\/ \u0441 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0435\u0439 \u0438 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u043e\u043c \u043f\u043e\u043b\u0435\u0439.var set = new HashSet&lt;Point&gt;();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 <code>struct<\/code> \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>IEquatable&lt;T&gt;<\/code>, \u0442\u043e <code>EqualityComparer&lt;T&gt;.Default<\/code> \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c <code>ValueType.Equals<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u043e\u043a\u0441\u0438\u0442\u044c. \u042d\u0442\u043e \u0431\u044c\u0451\u0442 \u043f\u043e <code>Dictionary<\/code>, <code>HashSet<\/code> \u0438 \u043b\u044e\u0431\u044b\u043c \u043c\u0435\u0441\u0442\u0430\u043c, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438.<\/p>\n<p><strong>\u041b\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong> \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 <code>IEquatable&lt;T&gt;<\/code> \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0439\u0442\u0435 <code>GetHashCode()<\/code> \u0434\u043b\u044f <code>struct<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438. \u0421\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432 C# 10+ \u2014 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043a\u0430\u043a <code>record struct<\/code>: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 <code>Equals<\/code>, <code>GetHashCode<\/code> \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <code>IEquatable&lt;T&gt;<\/code> \u0437\u0430 \u0432\u0430\u0441, \u0431\u0435\u0437 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0438 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<pre><code>\/\/ \u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0443\u0447\u043d\u044b\u0445 Equals\/GetHashCode\/IEquatable.public readonly record struct Point(int X, int Y);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>4. params object[] \u0438 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432<\/h4>\n<pre><code>int code = 42;\/\/ \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 object \u2192 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u043a\u0430\u0436\u0434\u043e\u0433\u043e value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.Log(\"code={0}, retries={1}\", code, retries);void Log(string fmt, params object[] args) { \/* ... *\/ }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u044e\u0431\u043e\u0439 <code>params object[]<\/code>-API \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442: <code>int<\/code>, <code>enum<\/code>, <code>DateTime<\/code>, \u0432\u0430\u0448 <code>struct<\/code>. \u042d\u0442\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0436\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a <code>object<\/code>. \u0421\u0442\u0430\u0440\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u201c\u0443\u0434\u043e\u0431\u043d\u044b\u0435\u201d \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a.<\/p>\n<p><strong>\u041b\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong> \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 structured logging \u0441 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 source generator (<code>[LoggerMessage]<\/code>), \u043b\u0438\u0431\u043e \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e \u043b\u043e\u0433\u0430 (<code>if (logger.IsEnabled(...))<\/code>), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 <code>params Span&lt;T&gt;<\/code> (C# 13) \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 <code>ReadOnlySpan&lt;&gt;<\/code> \u0442\u043e\u0436\u0435 \u0441\u043d\u0438\u043c\u0430\u044e\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u043e\u043a\u0441\u0438\u043d\u0433 value\u2192object \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0441\u0451 \u0435\u0449\u0451 <code>object<\/code>.<\/p>\n<h4>5. \u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043b\u0438 this<\/h4>\n<pre><code>int counter = 0;Action inc = () =&gt; counter++;   \/\/ counter \u043f\u043e\u0434\u043d\u044f\u0442 \u0432 closure-\u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u043a\u0443\u0447\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432 \u0441\u0442\u0440\u043e\u0433\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u043d\u043e \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f: \u0437\u0430\u0445\u0432\u0430\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f (<code>&lt;&gt;c__DisplayClass...<\/code>) \u043d\u0430 \u043a\u0443\u0447\u0435. \u0417\u0430\u0445\u0432\u0430\u0442 <code>this<\/code> \u0442\u0430\u0449\u0438\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u0441\u044c \u043e\u0431\u044a\u0435\u043a\u0442. \u041d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 Gen0-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u0438 <code>box<\/code>.<\/p>\n<p><strong>\u041b\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong> \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u0435 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u044b (<code>static () =&gt; ...<\/code>, C# 9+), \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0445\u0432\u0430\u0442.<\/p>\n<h3>\u0411\u043e\u043a\u0441\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u041d\u0415 \u0431\u043e\u043a\u0441\u0438\u0442: \u0447\u0435\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c<\/h3>\n<p>\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u201c\u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0432\u043e\u0442 \u0442\u0443\u0442\u201d \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430. JIT \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u043f\u0430\u043a\u043e\u0432\u043e\u043a, \u0438 \u0441\u043b\u0435\u043f\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u2014 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u043d\u0443\u043b\u044f \u0432\u044b\u0433\u043e\u0434\u044b. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0433\u0434\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0443\u0436\u0435 \u043d\u0435\u0442 (\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438!).<\/p>\n<p><code><strong>Enum.HasFlag<\/strong><\/code><strong> \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u043e\u043a\u0441\u0438\u0442.<\/strong> \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u201c\u0433\u0440\u0430\u0431\u043b\u0438\u201d-\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439: <code>state.HasFlag(State.A)<\/code> \u044f\u043a\u043e\u0431\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0430\u0432\u0434\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 .NET Framework, \u043d\u043e JIT \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 <code>HasFlag<\/code> \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c enum \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e (<code>(state &amp; State.A) == State.A<\/code>) \u0435\u0449\u0451 \u0432 \u044d\u043f\u043e\u0445\u0443 .NET Core 2.1. \u041d\u0430 .NET 8\/10 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e <strong>\u043d\u043e\u043b\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439<\/strong>. \u0420\u0443\u0447\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430 <code>(state &amp; State.A) != 0<\/code> \u0432\u0441\u0451 \u0435\u0449\u0451 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0430 \u0434\u043b\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e \u043f\u0443\u0442\u0438 \u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u0435\u0435, \u043d\u043e \u201c\u043e\u043d\u043e \u0431\u043e\u043a\u0441\u0438\u0442\u201d \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.<\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0431\u0435\u0437 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430.<\/strong> \u0421 C# 10 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>DefaultInterpolatedStringHandler<\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c generic-\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 <code>AppendFormatted&lt;T&gt;(T value)<\/code>. \u0414\u043b\u044f <code>int<\/code>, <code>double<\/code> \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u0431\u0435\u0437 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438. \u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a <code>object<\/code> \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 <code>params object[]<\/code> (\u0441\u043c. \u043f\u0443\u043d\u043a\u0442 4 \u0432\u044b\u0448\u0435). \u0422\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043a\u0441\u0438\u0442 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f, \u0430 <code>object<\/code>-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430 \u0435\u0451 \u043f\u0443\u0442\u0438.<\/p>\n<p><strong>Generic-\u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e <\/strong><code><strong>struct<\/strong><\/code><strong>-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0435 \u0431\u043e\u043a\u0441\u044f\u0442 \u0441\u0430\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.<\/strong> <code>EqualityComparer&lt;T&gt;.Default<\/code>, <code>List&lt;T&gt;<\/code>, <code>Dictionary&lt;TKey,TValue&gt;<\/code> \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e value-\u0442\u0438\u043f\u0443: JIT \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>struct<\/code>-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 value\u2192object \u0442\u0430\u043c \u043d\u0435\u0442 (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e <code>IEquatable&lt;T&gt;<\/code> \u2014 \u0441\u043c. \u043f\u0443\u043d\u043a\u0442 3).<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0437\u0434\u0435\u043b\u0430: \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u201c\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u043f\u043e \u0433\u0430\u0439\u0434\u0443 \u0438\u0437 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0434\u0438\u0437\u0430\u0441\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u0432\u0430\u0441, \u0438 \u0432\u0430\u0448\u0430 \u201c\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u201d \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0445\u0443\u0434\u0448\u0438\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<h3>\u041c\u0438\u043d\u0438-\u043a\u0435\u0439\u0441: \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043f\u043e struct-\u043a\u043b\u044e\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0440\u0435\u043b Gen0<\/h3>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430: \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e <code>Dictionary&lt;RouteKey, Handler&gt;<\/code>, \u0433\u0434\u0435 <code>RouteKey<\/code> \u2014 <code>struct<\/code> \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0439 (<code>int TenantId<\/code>, <code>ServiceType Type<\/code>). \u041f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 8k \u0441\u043e\u0431\u044b\u0442\u0438\u0439\/\u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0440\u043e\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u0445\u043e\u0442\u044f \u0432 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435 <code>Resolve<\/code> \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e <code>new<\/code>.<\/p>\n<p><code>dotnet-gcdump<\/code> \u043d\u0430 \u0431\u043e\u0435\u0432\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u0436\u0438\u0432\u0443\u0449\u0438\u0445 \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code>System.Object<\/code> \u0438 \u043e\u0431\u0451\u0440\u0442\u043e\u043a \u043d\u0430\u0434 \u043f\u043e\u043b\u044f\u043c\u0438 \u043a\u043b\u044e\u0447\u0430 \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043b\u0435\u0434 <code>ValueType.Equals<\/code>. \u041f\u0440\u0438\u0447\u0438\u043d\u0430: <code>RouteKey<\/code> \u0431\u044b\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u043c <code>struct<\/code> \u0431\u0435\u0437 <code>IEquatable&lt;RouteKey&gt;<\/code>. \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>dict.TryGetValue<\/code> \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u0443\u0445\u043e\u0434\u0438\u043b \u043d\u0430 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0438 \u0431\u043e\u043a\u0441\u0438\u043b \u043f\u043e\u043b\u044f \u043a\u043b\u044e\u0447\u0430 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0424\u0438\u043a\u0441 \u2014 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>\/\/ \u0431\u044b\u043b\u043e:public struct RouteKey { public int TenantId; public ServiceType Type; }\/\/ \u0441\u0442\u0430\u043b\u043e:public readonly record struct RouteKey(int TenantId, ServiceType Type);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>record struct<\/code> \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b <code>IEquatable&lt;RouteKey&gt;<\/code>, <code>EqualityComparer&lt;RouteKey&gt;.Default<\/code> \u043f\u043e\u0448\u0451\u043b \u043f\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0431\u0435\u0437 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438. Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 <code>Resolve<\/code> \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u0447\u0435\u0437\u043b\u0438, p99 \u043f\u0440\u043e\u0441\u0435\u043b \u043d\u0430 \u043e\u0449\u0443\u0442\u0438\u043c\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043d\u044f\u0442\u043e\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 GC. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u2014 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430; \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0434\u0435 \u2014 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435.<\/p>\n<h3>\u041c\u0438\u043d\u0438-\u043a\u0435\u0439\u0441 \u21162: \u043b\u044f\u043c\u0431\u0434\u0430 \u0432 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u0445\u0435\u043d\u0434\u043b\u0435\u0440\u0435, \u0442\u044f\u043d\u0443\u0432\u0448\u0430\u044f Gen0<\/h3>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043d\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432 \u0441\u0442\u0440\u043e\u0433\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0430 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f closure-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u043e \u0432\u0430\u043b\u044f\u0442 \u0432 \u0442\u0443 \u0436\u0435 \u043a\u0443\u0447\u0443. \u0425\u0435\u043d\u0434\u043b\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0430\u0442\u0447\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043b\u0431\u044d\u043a \u0447\u0435\u0440\u0435\u0437 \u043b\u044f\u043c\u0431\u0434\u0443:<\/p>\n<pre><code>\/\/ \u0413\u043e\u0440\u044f\u0447\u0438\u0439 \u043f\u0443\u0442\u044c: \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u0430\u0442\u0447\u0430.foreach (var item in batch)    _processor.Enqueue(() =&gt; Handle(item, _ctx));  \/\/ \u0437\u0430\u0445\u0432\u0430\u0442 item \u0438 this(_ctx)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u044f\u043c\u0431\u0434\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e <code>item<\/code> \u0438 \u043d\u0435\u044f\u0432\u043d\u043e <code>this<\/code> (\u0447\u0435\u0440\u0435\u0437 <code>_ctx<\/code>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f <code>&lt;&gt;c__DisplayClass<\/code>. <code>dotnet-gcdump<\/code> \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0440\u043e\u0432\u043d\u043e \u0438\u0445 \u2014 \u0442\u044b\u0441\u044f\u0447\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0445 <code>&lt;&gt;c__DisplayClass<\/code>-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u0432\u0435\u0434\u0443\u0449\u0438\u043c \u0432 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<p>\u0424\u0438\u043a\u0441 \u2014 \u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0432\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0447\u0442\u043e\u0431\u044b \u043b\u044f\u043c\u0431\u0434\u0430 \u0441\u0442\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0439:<\/p>\n<pre><code>\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043b\u044f\u043c\u0431\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442.foreach (var item in batch)    _processor.Enqueue(static (s) =&gt; Handle(s.item, s.ctx), (item, ctx: _ctx));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>static<\/code>-\u043b\u044f\u043c\u0431\u0434\u0430 \u043d\u0435 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 closure-\u043a\u043b\u0430\u0441\u0441: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u0443\u0448\u043b\u0438, profile \u0441\u0442\u0430\u043b \u0440\u043e\u0432\u043d\u044b\u043c. \u041c\u043e\u0440\u0430\u043b\u044c \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043a\u0435\u0439\u0441\u0435: \u0441\u0438\u043c\u043f\u0442\u043e\u043c (Gen0 \u00ab\u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430\u00bb) \u043e\u0434\u0438\u043d, \u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u043d\u0435 \u0432 <code>new<\/code>, \u0430 \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0439\u043c\u0430\u0442\u044c: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/h3>\n<h4>MemoryDiagnoser \u0432 BenchmarkDotNet \u2014 \u043f\u0435\u0440\u0432\u0430\u044f \u043b\u0438\u043d\u0438\u044f<\/h4>\n<pre><code>[MemoryDiagnoser][SimpleJob(RuntimeMoniker.Net10_0)]public class BoxingBench{    private readonly List&lt;int&gt; _list = Enumerable.Range(0, 1000).ToList();    [Benchmark(Baseline = true)]    public int OverConcrete()    {        int sum = 0;        foreach (var n in _list) sum += n;   \/\/ struct enumerator, 0 B        return sum;    }    [Benchmark]    public int OverInterface()    {        int sum = 0;        IEnumerable&lt;int&gt; seq = _list;        foreach (var n in seq) sum += n;      \/\/ \u0431\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 enumerator        return sum;    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043b\u043e\u043d\u043a\u0430 <code>Allocated<\/code> \u0432 \u043e\u0442\u0447\u0451\u0442\u0435 \u2014 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u0443 \u043c\u0435\u0442\u043e\u0434\u0430, \u0433\u0434\u0435 \u0432\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0435 <code>new<\/code>, \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u0430\u044f \u2014 \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0438\u043b\u0438 closure. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043d\u0443 \u201c\u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u201d. \u0418\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0442\u0447\u0451\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Method<\/p>\n<\/th>\n<th>\n<p align=\"left\">Mean<\/p>\n<\/th>\n<th>\n<p align=\"left\">Allocated<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OverConcrete (baseline)<\/p>\n<\/td>\n<td>\n<p align=\"left\">~0.6 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0 B<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OverInterface<\/p>\n<\/td>\n<td>\n<p align=\"left\">~2.1 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>40 B<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u043e\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0435\u043d\u0443\u043b\u044f \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>Allocated<\/code> \u2014 \u0432\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u0434\u0438\u0430\u0433\u043d\u043e\u0437. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u0432\u0430\u0436\u0435\u043d \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<h4>DOTNET_JitDisasm \u2014 \u0443\u0432\u0438\u0434\u0435\u0442\u044c box \u0441\u0432\u043e\u0438\u043c\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438<\/h4>\n<pre><code class=\"bash\">DOTNET_JitDisasm=\"BoxingBench:OverInterface\" dotnet run -c Release<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a <code>IEnumerator<\/code> \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0414\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0432 IL \u0438\u0449\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>box<\/code> \u2014 \u0435\u0451 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>ILSpy<\/code> \u0438\u043b\u0438 <code>dotnet ildasm<\/code> \u043d\u0430 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 .NET 8+.<\/p>\n<p>\u0412 IL \u043f\u0440\u044f\u043c\u043e\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a \u2014 \u0438\u0449\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>box<\/code>:<\/p>\n<pre><code>\/\/ IL \u0434\u043b\u044f: object o = 42;ldc.i4.s   42box        [System.Runtime]System.Int32   \/\/ &lt;- \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 int \u0432 \u043a\u0443\u0447\u0443stloc.0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0439 \u0441\u043b\u0435\u0434 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438: \u0432\u044b\u0437\u043e\u0432 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 (\u0438\u043c\u0435\u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439\u043c\u043e\u0432 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u0432\u0430\u0436\u0435\u043d \u0441\u0430\u043c <code>call<\/code> \u0432 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438):<\/p>\n<pre><code>; \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 Tier 1 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0441 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u043e\u043c \u0432 \u0446\u0438\u043a\u043b\u0435G_M000_IG04:    mov      rcx, &lt;MethodTable System.Int32&gt;    call     CORINFO_HELP_BOX            ; &lt;- \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438    mov      rsi, rax    ; ... \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0435\u0439<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u044e\u0447 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0432\u0438\u0434\u0438\u0442\u0435 <code>CORINFO_HELP_BOX<\/code> (\u0438\u043b\u0438 <code>box<\/code> \u0432 IL) \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u2014 \u0442\u0430\u043c Gen0-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<h4>dotnet-gcdump \u0438 dotnet-trace \u2014 \u0432 \u043f\u0440\u043e\u0434\u0435<\/h4>\n<p><code>dotnet-trace collect<\/code> \u0441 GC-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u0434\u0430\u0451\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438. <code>dotnet-gcdump<\/code> \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u043a\u0443\u0447\u0438 \u2014 \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435 boxed-\u043e\u0431\u044a\u0435\u043a\u0442\u044b (<code>System.Int32<\/code> \u0432 \u043a\u0443\u0447\u0435 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e value-\u0442\u0438\u043f\u044b \u043d\u0430 \u0441\u0442\u0435\u043a\u0435) \u0438 closure-\u043a\u043b\u0430\u0441\u0441\u044b (<code>&lt;&gt;c__DisplayClass...<\/code>).<\/p>\n<h3>\u0427\u0435\u043a-\u043b\u0438\u0441\u0442: \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438<\/h3>\n<ol>\n<li>\n<p>\u041b\u044e\u0431\u043e\u0439 <code>struct<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0430 generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 <code>where T : struct, IInterface<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 <code>IEnumerable&lt;T&gt;<\/code> \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438. \u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><code>struct<\/code> \u0432 <code>Dictionary<\/code>\/<code>HashSet<\/code> \u0431\u0435\u0437 <code>IEquatable&lt;T&gt;<\/code> \u0438 <code>GetHashCode()<\/code> \u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430 <code>record struct<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>params object[]<\/code>-API \u0438 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432 \u0441 value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041b\u044f\u043c\u0431\u0434\u044b, \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 <code>this<\/code>. \u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0430 <code>static<\/code>-\u043b\u044f\u043c\u0431\u0434\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0447\u0438\u043d\u0438\u0442\u044c \u201c\u0431\u043e\u043a\u0441\u0438\u043d\u0433\u201d \u043f\u043e \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0433\u0430\u0439\u0434\u0443 (<code>HasFlag<\/code>, \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f) \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 \u0432\u0430\u0448\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p><code>MemoryDiagnoser<\/code> \u043a\u0430\u043a \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441-\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u0432 CI: \u043a\u043e\u043b\u043e\u043d\u043a\u0430 <code>Allocated<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u0438 \u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041a\u043e\u0433\u0434\u0430 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e<\/h3>\n<p>\u041d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0438\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u2014 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u0435\u0435. \u041f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u043e\u0440\u044c\u0431\u0430 \u0441 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u0440\u0430\u0434\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443, \u2014 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0431\u0435\u0437 \u0432\u044b\u0433\u043e\u0434\u044b. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u0440\u044c <code>MemoryDiagnoser<\/code>-\u043e\u043c \u0438 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440\u043e\u043c, \u043d\u0430\u0439\u0434\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439 \u0442\u044f\u0436\u0451\u043b\u0443\u044e \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044e \u0438\u0437 generic-\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 <code>record struct<\/code>.<\/p>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u0440\u0430\u0437\u0431\u043e\u0440 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439: async state machine \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 (\u043a\u043e\u0433\u0434\u0430 <code>async<\/code>-\u043c\u0435\u0442\u043e\u0434 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442), <code>ValueTask<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>Task<\/code> \u0438 \u0433\u0434\u0435 \u043e\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442, \u0430 \u0433\u0434\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0445\u0443\u0436\u0435, \u0438 <code>Span&lt;T&gt;<\/code>\/<code>stackalloc<\/code> \u043a\u0430\u043a \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0431\u0440\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u043b\u044e\u0441 \u2014 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 Roslyn-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u043e\u0432\u044f\u0442 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0435\u0449\u0451 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043e\u043d \u0434\u043e\u0435\u0434\u0435\u0442 \u0434\u043e \u043f\u0440\u043e\u0434\u0430.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0433\u0434\u0435 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b \u0435\u0433\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 &#8212; \u0438 \u043a\u0430\u043a\u043e\u0439 \u201c\u0431\u043e\u043a\u0441\u0438\u043d\u0433\u201d \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0443\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1049236\/\">https:\/\/habr.com\/ru\/articles\/1049236\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u0430\u043c\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445. \u0412\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 struct \u0440\u0430\u0434\u0438 zero-allocation, \u043f\u0440\u043e\u0448\u043b\u0438 code review, \u0430 \u0432 \u043f\u0440\u043e\u0434\u0435 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0438\u0434\u0443\u0442 \u043a\u043e\u0441\u044f\u043a\u043e\u043c. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u043e\u043d \u043c\u043e\u043b\u0447\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 value-\u0442\u0438\u043f \u0432 \u043a\u0443\u0447\u0443 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u2014 \u0430 \u043d\u0430 \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e.TL;DR. \u0411\u043e\u043a\u0441\u0438\u043d\u0433 (boxing) \u0432 .NET \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e object o = 42. \u041e\u043d \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430 struct, \u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u043c ValueType.Equals, \u0432 params object[]-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0432 foreach \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0438 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u044c \u201c\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u201d \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0433\u0430\u0439\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u2014 JIT \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0438\u0445 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c, \u0438 \u0441\u043b\u0435\u043f\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u044b \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u0434\u043d\u043e. \u041d\u0438\u0436\u0435 \u2014 \u043a\u0430\u0440\u0442\u0430 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0436\u0438\u0432\u0451\u0442 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0443\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438-\u043a\u0435\u0439\u0441, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u043d\u0430 BenchmarkDotNet \u0441 MemoryDiagnoser, \u0441\u043f\u043e\u0441\u043e\u0431 \u043b\u043e\u0432\u0438\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 DOTNET_JitDisasm \u0438 dotnet-gcdump, \u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.\u041e \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0438 \u0447\u0438\u0441\u043b\u0430\u0445. \u0412\u0441\u0451 \u043f\u0440\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u043d\u0430 .NET 10 (\u0442\u0435\u043a\u0443\u0449\u0438\u0439 LTS) \u0438 C# 13\/14-\u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, Release, \u0431\u0435\u0437 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, BenchmarkDotNet \u0441 MemoryDiagnoser. \u041d\u0430 .NET 8\/9 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435, \u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 JIT \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0441\u0442\u0430\u0442\u044c\u0438: \u043d\u0435 \u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u0435), \u0433\u043e\u043d\u044f\u0439\u0442\u0435 MemoryDiagnoser \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u0427\u0438\u0441\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u043d\u0438\u0436\u0435 \u2014 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0430 \u043d\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430.\u041f\u0440\u043e\u043b\u043e\u0433: \u201c\u0443 \u043d\u0430\u0441 \u0436\u0435 \u0432\u0441\u0451 \u043d\u0430 struct, \u043e\u0442\u043a\u0443\u0434\u0430 Gen0?\u201d\u0421\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 readonly struct-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e new, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 hot path. \u041f\u043e \u0437\u0430\u0434\u0443\u043c\u043a\u0435 \u2014 \u043d\u043e\u043b\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u041d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435 \u2014 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.\u041f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438, \u043d\u043e \u0441\u0442\u0435\u043a \u0432\u0435\u0434\u0451\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434, \u0433\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e new. \u0422\u0430\u043c \u0446\u0438\u043a\u043b \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u043f\u0430\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 .Equals(), \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 params-\u043c\u0435\u0442\u043e\u0434 \u043b\u043e\u0433\u0430. \u0413\u043b\u0430\u0437\u0430\u043c\u0438 \u2014 \u0447\u0438\u0441\u0442\u043e. \u0412 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u2014 box-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0431\u043e\u043a\u0441\u0438\u043d\u0433: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C# \u0438 JIT \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0432\u0430\u0448 struct \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u0443\u0447\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043a\u043e\u0434\u0430 value-\u0442\u0438\u043f \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439. \u0421\u0438\u043c\u043f\u0442\u043e\u043c \u2014 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u201c\u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430\u201d, \u0438 \u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u043d\u0438 \u0432 code review, \u043d\u0438 \u0432 \u0434\u0430\u043c\u043f\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 IL \u0438\u043b\u0438 \u0434\u0438\u0437\u0430\u0441\u043c.\u0415\u0441\u043b\u0438 \u0442\u0435\u043c\u0430 \u0431\u043b\u0438\u0437\u043a\u0430 &#8212; \u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u043f\u043e C# \u0438 .NET (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441, \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c) \u0432 \u0441\u0432\u043e\u0451\u043c Telegram-\u043a\u0430\u043d\u0430\u043b\u0435: t.me\/csharp_ci. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0440\u043e\u0433\u043e\u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 value-\u0442\u0438\u043f\u0430 (struct, enum, \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432) \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043a\u0443\u0447\u0435. \u0420\u0430\u043d\u0442\u0430\u0439\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443. \u0410\u043d\u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u2014 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0442\u0438\u043f\u0430.\u0426\u0435\u043d\u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u0445: \u043a\u0430\u0436\u0434\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u2014 \u044d\u0442\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432 Gen0. \u041c\u043d\u043e\u0433\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0447\u0430\u0441\u0442\u044b\u0435 Gen0-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043f\u0430\u0443\u0437\u044b (\u043f\u0443\u0441\u0442\u044c \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435), \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043a\u044d\u0448\u0430 \u0438 \u043e\u0431\u0449\u0438\u0439 \u0440\u043e\u0441\u0442 CPU \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0441 SLA \u043f\u043e p99 \u044d\u0442\u043e \u0431\u044c\u0451\u0442 \u043f\u043e \u0445\u0432\u043e\u0441\u0442\u0443 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u043b\u0438\u0448\u043d\u044f\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f.\u0412 IL \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432\u0438\u0434\u0435\u043d \u044f\u0432\u043d\u043e \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f box. \u0418\u043c\u0435\u043d\u043d\u043e \u0435\u0451 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c.\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430: \u0433\u0434\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0435\u0441\u0442\u044c, \u0430 \u0433\u0434\u0435 \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435\u0442\u0421\u0432\u043e\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u044d\u043a\u0440\u0430\u043d \u2014 \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0438\u0436\u0435. \u041a\u043e\u043b\u043e\u043d\u043a\u0430 \u201c\u0421\u0435\u0439\u0447\u0430\u0441\u201d \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 .NET 10 \u0432 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u0441\u0435\u0439\u0447\u0430\u0441?\u041a\u0430\u043a \u043f\u043e\u0439\u043c\u0430\u0442\u044c\u0427\u0435\u043c \u043b\u0435\u0447\u0438\u0442\u044cstruct \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0414\u0430box \u0432 IL, Allocated &gt; 0generic where T : struct, Iforeach \u043f\u043e IEnumerable&lt;T&gt;\u0414\u0430 (enumerator)MemoryDiagnoser\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \/ \u0438\u043d\u0434\u0435\u043a\u0441struct \u0432 HashSet\/Dictionary \u0431\u0435\u0437 IEquatable&lt;T&gt;\u0414\u0430gcdump: boxed-\u043f\u043e\u043b\u044fIEquatable&lt;T&gt; \/ record structparams object[] \u0441 value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438\u0414\u0430box \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442[LoggerMessage], \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e\u041b\u044f\u043c\u0431\u0434\u0430 \u0441 \u0437\u0430\u0445\u0432\u0430\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \/ this\u0414\u0430 (closure-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f)gcdump: &lt;&gt;c__DisplayClassstatic-\u043b\u044f\u043c\u0431\u0434\u0430Enum.HasFlag\u041d\u0435\u0442 (\u0441 .NET Core 2.1)\u0434\u0438\u0437\u0430\u0441\u043c: \u0447\u0438\u0441\u0442\u0430\u044f \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f $&#187;x={i}&#187; \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432\u041d\u0435\u0442 (C# 10+)\u0434\u0438\u0437\u0430\u0441\u043c\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043eGeneric-\u043c\u0435\u0442\u043e\u0434 \u0441\u043e struct-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c\u041d\u0435\u0442\u2014\u2014\u041a\u0430\u0440\u0442\u0430 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0438 \u043d\u0430 .NET 10\u041c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 struct \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e (object) \u0438 \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u0441\u0432\u0435\u0436\u0435\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432, \u0430 \u043d\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438.1. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430 struct \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430public interface IShape { double Area(); }public struct Circle : IShape{    public double R;    public double Area() =&gt; Math.PI * R * R;}\/\/ \u0411\u043e\u043a\u0441\u0438\u043d\u0433: Circle \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 IShape \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438.IShape s = new Circle { R = 2 };double a = s.Area();\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e struct \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043e\u043d \u0431\u043e\u043a\u0441\u0438\u0442\u0441\u044f \u2014 \u0432\u0435\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439. \u0412\u044b\u0437\u043e\u0432 s.Area() \u0438\u0434\u0451\u0442 \u0443\u0436\u0435 \u043f\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0435 Circle \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 Area() \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u2014 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u043d\u0435\u0442. \u0413\u0440\u0430\u0431\u043b\u0438 \u0432\u044b\u043b\u0435\u0437\u0430\u044e\u0442, \u043a\u043e\u0433\u0434\u0430 struct \u201c\u043f\u0440\u044f\u0447\u0443\u0442\u201d \u0437\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0434\u0438 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430.\u041b\u0435\u0447\u0435\u043d\u0438\u0435: generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 where T : struct, IShape \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 JIT \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 \u043f\u043e value-\u0442\u0438\u043f\u0443 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0435\u0437 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438.2. foreach \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438\/\/ List&lt;int&gt;.Enumerator \u2014 struct. \u041d\u043e \u0447\u0435\u0440\u0435\u0437 IEnumerable&lt;int&gt;\/\/ \u043e\u043d \u0431\u043e\u043a\u0441\u0438\u0442\u0441\u044f: foreach \u0434\u0451\u0440\u0433\u0430\u0435\u0442 IEnumerator&lt;int&gt;.MoveNext().IEnumerable&lt;int&gt; numbers = new List&lt;int&gt; { 1, 2, 3 };foreach (var n in numbers) { \/* &#8230; *\/ }List&lt;T&gt; \u043e\u0442\u0434\u0430\u0451\u0442 struct-\u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0442\u043e\u0440, \u0438 foreach \u043f\u043e List&lt;T&gt; \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043a IEnumerable&lt;T&gt; \u2014 \u0438 foreach \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0431\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430: \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 IEnumerable&lt;T&gt; \u201c\u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438\u201d \u0438 \u0442\u0435\u0440\u044f\u0435\u0442 zero-alloc \u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e.\u041b\u0435\u0447\u0435\u043d\u0438\u0435: \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f (List&lt;T&gt;, \u043c\u0430\u0441\u0441\u0438\u0432) \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0439\u0442\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443. \u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f generic-\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430.3. \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u044b \u0438 Equals \u043d\u0430 structpublic struct Point { public int X, Y; }\/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c IEquatable&lt;Point&gt;,\/\/ EqualityComparer&lt;Point&gt;.Default \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 ValueType.Equals\/\/ \u0441 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0435\u0439 \u0438 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u043e\u043c \u043f\u043e\u043b\u0435\u0439.var set = new HashSet&lt;Point&gt;();\u0415\u0441\u043b\u0438 struct \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 IEquatable&lt;T&gt;, \u0442\u043e EqualityComparer&lt;T&gt;.Default \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c ValueType.Equals, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u043e\u043a\u0441\u0438\u0442\u044c. \u042d\u0442\u043e \u0431\u044c\u0451\u0442 \u043f\u043e Dictionary, HashSet \u0438 \u043b\u044e\u0431\u044b\u043c \u043c\u0435\u0441\u0442\u0430\u043c, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438.\u041b\u0435\u0447\u0435\u043d\u0438\u0435: \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 IEquatable&lt;T&gt; \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0439\u0442\u0435 GetHashCode() \u0434\u043b\u044f struct, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438. \u0421\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432 C# 10+ \u2014 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043a\u0430\u043a record struct: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 Equals, GetHashCode \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e IEquatable&lt;T&gt; \u0437\u0430 \u0432\u0430\u0441, \u0431\u0435\u0437 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0438 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.\/\/ \u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0443\u0447\u043d\u044b\u0445 Equals\/GetHashCode\/IEquatable.public readonly record struct Point(int X, int Y);4. params object[] \u0438 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432int code = 42;\/\/ \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 object \u2192 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u043a\u0430\u0436\u0434\u043e\u0433\u043e value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.Log(&#171;code={0}, retries={1}&#187;, code, retries);void Log(string fmt, params object[] args) { \/* &#8230; *\/ }\u041b\u044e\u0431\u043e\u0439 params object[]-API \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 value-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442: int, enum, DateTime, \u0432\u0430\u0448 struct. \u042d\u0442\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0436\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a object. \u0421\u0442\u0430\u0440\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u201c\u0443\u0434\u043e\u0431\u043d\u044b\u0435\u201d \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a.\u041b\u0435\u0447\u0435\u043d\u0438\u0435: \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 structured logging \u0441 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 source generator ([LoggerMessage]), \u043b\u0438\u0431\u043e \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e \u043b\u043e\u0433\u0430 (if (logger.IsEnabled(&#8230;))), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 params Span&lt;T&gt; (C# 13) \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 ReadOnlySpan&lt;&gt; \u0442\u043e\u0436\u0435 \u0441\u043d\u0438\u043c\u0430\u044e\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u043e\u043a\u0441\u0438\u043d\u0433 value\u2192object \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0441\u0451 \u0435\u0449\u0451 object.5. \u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043b\u0438 thisint counter = 0;Action inc = () =&gt; counter++;   \/\/ counter \u043f\u043e\u0434\u043d\u044f\u0442 \u0432 closure-\u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u043a\u0443\u0447\u0435\u042d\u0442\u043e \u043d\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433 \u0432 \u0441\u0442\u0440\u043e\u0433\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u043d\u043e \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f: \u0437\u0430\u0445\u0432\u0430\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f (&lt;&gt;c__DisplayClass&#8230;) \u043d\u0430 \u043a\u0443\u0447\u0435. \u0417\u0430\u0445\u0432\u0430\u0442 this \u0442\u0430\u0449\u0438\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u0441\u044c \u043e\u0431\u044a\u0435\u043a\u0442. \u041d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043f\u0443\u0442\u0438 \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 Gen0-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u0438 box.\u041b\u0435\u0447\u0435\u043d\u0438\u0435: \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u0435 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u044b (static () =&gt; &#8230;, C# 9+), \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0445\u0432\u0430\u0442.\u0411\u043e\u043a\u0441\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u041d\u0415 \u0431\u043e\u043a\u0441\u0438\u0442: \u0447\u0435\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u201c\u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u0432\u043e\u0442 \u0442\u0443\u0442\u201d \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430. JIT \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u043f\u0430\u043a\u043e\u0432\u043e\u043a, \u0438 \u0441\u043b\u0435\u043f\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u2014 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u043d\u0443\u043b\u044f \u0432\u044b\u0433\u043e\u0434\u044b. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0433\u0434\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0443\u0436\u0435 \u043d\u0435\u0442 (\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438!).Enum.HasFlag \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u043e\u043a\u0441\u0438\u0442. \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u201c\u0433\u0440\u0430\u0431\u043b\u0438\u201d-\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439: state.HasFlag(State.A) \u044f\u043a\u043e\u0431\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0430\u0432\u0434\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 .NET Framework, \u043d\u043e JIT \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 HasFlag \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c enum \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e ((state &amp; State.A) == State.A) \u0435\u0449\u0451 \u0432 \u044d\u043f\u043e\u0445\u0443 .NET Core 2.1. \u041d\u0430 .NET 8\/10 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e \u043d\u043e\u043b\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u0420\u0443\u0447\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430 (state &amp; State.A) != 0 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0430 \u0434\u043b\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e \u043f\u0443\u0442\u0438 \u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u0435\u0435, \u043d\u043e \u201c\u043e\u043d\u043e \u0431\u043e\u043a\u0441\u0438\u0442\u201d \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0447\u0430\u0441\u0442\u043e \u0431\u0435\u0437 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430. \u0421 C# 10 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 DefaultInterpolatedStringHandler, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c generic-\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 AppendFormatted&lt;T&gt;(T value). \u0414\u043b\u044f int, double \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u0431\u0435\u0437 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438. \u0411\u043e\u043a\u0441\u0438\u043d\u0433 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a object \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 params object[] (\u0441\u043c. \u043f\u0443\u043d\u043a\u0442 4 \u0432\u044b\u0448\u0435). \u0422\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043a\u0441\u0438\u0442 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f, \u0430 object-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430 \u0435\u0451 \u043f\u0443\u0442\u0438.Generic-\u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e struct-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0435 \u0431\u043e\u043a\u0441\u044f\u0442 \u0441\u0430\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. EqualityComparer&lt;T&gt;.Default, List&lt;T&gt;, Dictionary&lt;TKey,TValue&gt; \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e value-\u0442\u0438\u043f\u0443: JIT \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 struct-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-484163","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=484163"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484163\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=484163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=484163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=484163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}