{"id":287790,"date":"2018-08-16T14:16:40","date_gmt":"2018-08-16T10:16:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=287790"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=287790","title":{"rendered":"[DotNetBook] Span: \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 .NET"},"content":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/418911\/\" class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" width=\"350\" src=\"https:\/\/habrastorage.org\/webt\/34\/ua\/e6\/34uae6usmglyw10vxga3sgfgh8c.jpeg\" align=\"left\"> \u0421 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 .NET CLR, \u0438 .NET \u0432 \u0446\u0435\u043b\u043e\u043c (\u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u043e\u043a\u043e\u043b\u043e 200 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u043d\u0438\u0433\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438).<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u044f\u0437\u044b\u043a, \u0442\u0430\u043a \u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442: \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0435\u0441\u043b\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e-\u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442? \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043d\u0430\u043c \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0431\u0443\u0434\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u044d\u0442\u043e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u0440\u0430\u043f\u043f\u0435\u0440\u044b \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0418 \u043c\u0430\u0440\u0448\u0430\u043b\u043b\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>stackallloc<\/code>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u0435 \u043f\u0440\u043e \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044f\u0437\u044b\u043a\u0430 C# \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u0437 \u043c\u0438\u0440\u0430 C++ (\u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0438 \u044f), \u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 (\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0448\u0435\u043b \u0438\u0437 JavaScript). \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442? \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043b\u044e\u0434\u0438 \u0441\u043e \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c, \u0431\u043b\u0438\u0437\u043a\u0438\u043c \u043f\u043e \u0434\u0443\u0445\u0443 \u043a C\/C++ \u0438 \u0443\u0436 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u2014 \u043a \u044f\u0437\u044b\u043a\u0443 \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0421\u0442\u0430\u0442\u044c\u044f \u0445\u043e\u0442\u044c \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0432 \u0442\u0435\u043c\u0443 Span&lt;T&gt; \u0438 Memory&lt;T&gt;  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/post\/418911\/\">Span&lt;T&gt;: \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 .NET<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/420051\/\">Span&lt;T&gt; \u0438 ReadOnlyMemory&lt;T&gt;<\/a><\/li>\n<li>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Span&lt;T&gt; \u0438 Memory&lt;T&gt;<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u2014 \u0432\u0441\u0435 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 unsafe \u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0435 \u043a API \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0435\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>stackalloc<\/code> \u043f\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c: \u043e\u043d\u043e \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u043e \u043c\u0430\u043b\u043e. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442:<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043b\u0430\u0441\u0441 Interop.ReadDir<\/strong><br \/>  <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/b29f6328510207970763580d6f4db864e4b198af\/src\/mscorlib\/shared\/Interop\/Unix\/System.Native\/Interop.ReadDir.cs#L71-L83\">\/src\/mscorlib\/shared\/Interop\/Unix\/System.Native\/Interop.ReadDir.cs<\/a><\/p>\n<p>  <\/p>\n<pre><code>unsafe {     \/\/ s_readBufferSize is zero when the native implementation does not support reading into a buffer.     byte* buffer = stackalloc byte[s_readBufferSize];     InternalDirectoryEntry temp;     int ret = ReadDirR(dir.DangerousGetHandle(), buffer, s_readBufferSize, out temp);     \/\/ We copy data into DirectoryEntry to ensure there are no dangling references.     outputEntry = ret == 0 ?             new DirectoryEntry() {                 InodeName = GetDirectoryEntryName(temp), InodeType = temp.InodeType              }              : default(DirectoryEntry);      return ret; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0435\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0435 \u0432\u0447\u0438\u0442\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043a\u043e\u0434 \u0438 \u043e\u0442\u0432\u0435\u0442\u044c\u0442\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441: \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u0435\u043c\u0443? \u041c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 &#171;\u043d\u0435\u0442&#187;. \u0422\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442\u044c\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439: \u043f\u043e\u0447\u0435\u043c\u0443? \u041e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u043e\u0432\u043e <code>Dangerous<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u0430\u043a-\u0431\u044b \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442 \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a, \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u043a\u0442\u043e\u0440, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0430\u0448\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0430 <code>byte* buffer = stackalloc byte[s_readBufferSize];<\/code>, \u0430 \u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435 \u2014 <code>byte*<\/code>. \u042d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u2014 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043c\u044b\u0441\u043b\u044c: &#171;\u0430 \u0447\u0442\u043e, \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0447\u0442\u043e-\u043b\u0438?&#187;. \u0422\u043e\u0433\u0434\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0449\u0435 \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u043f\u0441\u0438\u0445\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c: \u043e\u0442\u0447\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c? \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u044f\u0437\u044b\u043a\u0430 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0437\u0434\u0435\u0441\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0430\u043b\u0435\u043a \u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, C++\/CLI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Assembler), \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0432 \u0447\u0435\u043c \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441? \u041a\u0430\u043a \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043b\u043e\u043d\u043e \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430? \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0430\u0442\u044c \u0438\u043c \u0447\u0443\u0432\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u0438\u044f \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u043f\u043e \u043d\u0435\u0437\u043d\u0430\u043d\u0438\u044e. \u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0436\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u044b <code>\u0442\u0438\u043f\u044b Span&lt;T&gt;<\/code> \u0438 <code>Memory&lt;T&gt;<\/code>?<\/p>\n<p>  <\/p>\n<h2 id=\"spant-readonlyspant\">Span[T], ReadOnlySpan[T]<\/h2>\n<p>  <\/p>\n<p>\u0422\u0438\u043f <code>Span<\/code> \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043a\u0430\u043a \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u043e\u043d\u0430 \u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0438\u043f\u0430 <code>Span<\/code> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0446\u0435\u043b\u0438 \u0435\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0447\u044c \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u0414\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e Span \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code>    var array = new [] {1,2,3,4,5,6};     var span = new Span&lt;int&gt;(array, 1, 3);     var position = span.BinarySearch(3);     Console.WriteLine(span[position]);  \/\/ -&gt; 3<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c <code>Span<\/code> (\u0438\u043b\u0438 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u044f\u0441\u044c \u043d\u0430 \u0441\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u0442 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u043e\u0432\u044c\u0435\u043c \u043d\u0430\u0448\u0443 \u0438\u0434\u0435\u044e \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code>void Main() {     var array = new [] {'1','2','3','4','5','6'};     var span = new Span&lt;char&gt;(array, 1, 3);     if(TryParseInt32(span, out var res))     {         Console.WriteLine(res);     }     else     {         Console.WriteLine(\"Failed to parse\");     } }  public bool TryParseInt32(Span&lt;char&gt; input, out int result) {     result = 0;     for (int i = 0; i &lt; input.Length; i++)     {         if(input[i] &lt; '0' || input[i] &gt; '9')             return false;     result = result * 10 + ((int)input[i] - '0');     }     return true; }  ----- 234<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, <code>Span&lt;T&gt;<\/code> \u0432\u0432\u043e\u0434\u0438\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u043a \u0438 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c. \u0427\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0435\u0442? \u0415\u0441\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0447\u0435\u0433\u043e \u0435\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u043d <code>Span<\/code>, \u0442\u043e \u043c\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043a\u0430\u043a \u043f\u0440\u043e \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0442\u0430\u043a \u0438 \u043f\u0440\u043e \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code>\/\/ Managed array var array = new[] { '1', '2', '3', '4', '5', '6' }; var arrSpan = new Span&lt;char&gt;(array, 1, 3); if (TryParseInt32(arrSpan, out var res1)) {     Console.WriteLine(res1); }  \/\/ String var srcString = \"123456\"; var strSpan = srcString.AsSpan().Slice(1, 3); if (TryParseInt32(strSpan, out var res2)) {     Console.WriteLine(res2); }  \/\/ void * Span&lt;char&gt; buf = stackalloc char[6]; buf[0] = '1'; buf[1] = '2'; buf[2] = '3'; buf[3] = '4'; buf[4] = '5'; buf[5] = '6';  if (TryParseInt32(buf.Slice(1, 3), out var res3)) {     Console.WriteLine(res3); }  ----- 234 234 234<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422.\u0435., \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <code>Span&lt;T&gt;<\/code> \u2014 \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e: \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u0438 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f Garbage Collection: \u0435\u0441\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u043d\u044c\u0448\u0435? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u0442\u043e \u0442\u0443\u0442 \u0434\u0430\u0436\u0435 \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438: \u043e\u043d\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0443 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0442\u0438\u043f \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0435\u0439. \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0438\u043f\u0435 \u0441\u0442\u0440\u043e\u043a\u0443, \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f, \u0445\u0440\u0430\u043d\u044f \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 (\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d):<\/p>\n<p>  <\/p>\n<pre><code>public readonly ref struct OurSpan&lt;T&gt; {     private T[] _array;     private string _str;     private T * _buffer;      \/\/ ... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043b\u0438 \u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u0438 \u0442\u0438\u043f\u0430, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <code>managed<\/code>, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0442 <code>Span&lt;T&gt;<\/code> \u043f\u0443\u0442\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>ref struct<\/code> \u0432 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u0445 <code>Span<\/code>? \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 &#171;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435&#187;, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u044b\u0448\u0438\u043c \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u0445. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u043a \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u0443\u0447\u0443. \u0410 \u043f\u043e\u0442\u043e\u043c\u0443 <code>Span<\/code>, \u0431\u0443\u0434\u0443\u0447\u0438 ref \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043d\u043e \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u043d\u0430\u0434\u043e \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 Span \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043d\u0438\u043c readonly \u0442\u0438\u043f\u0430 ReadOnlySpan:<\/p>\n<p>  <\/p>\n<blockquote><p>Span \u2014 \u044d\u0442\u043e \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432\u0437\u044f\u0442\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0431\u044b\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0439 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439.<\/p><\/blockquote>\n<p>\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e: \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code>public void Method1(Span&lt;byte&gt; buffer) {     buffer[0] = 0;     Method2(buffer.Slice(1,2)); } Method2(Span&lt;byte&gt; buffer) {     buffer[0] = 0;     Method3(buffer.Slice(1,1)); } Method3(Span&lt;byte&gt; buffer) {     buffer[0] = 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439: \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043d\u0435 \u0441 managed \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c, \u0430 \u0441 managed \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c. \u0422.\u0435. \u043d\u0435 \u0441 .NET managed \u0442\u0438\u043f\u043e\u043c, \u0430 \u0441 unsafe \u0442\u0438\u043f\u043e\u043c, \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0432 managed \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443.<\/p>\n<p>  <\/p>\n<h3 id=\"spant-na-primerah\">Span[T] \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/h3>\n<p>  <\/p>\n<p>\u0427\u0435\u043b\u043e\u0432\u0435\u043a \u0442\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0447\u0442\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430, \u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442. \u0410 \u043f\u043e\u0442\u043e\u043c\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u0435\u043a\u0438\u0439 \u043e\u043f\u044b\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c.<\/p>\n<p>  <\/p>\n<h4 id=\"valuestringbuilder\">ValueStringBuilder<\/h4>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f <code>ValueStringBuilder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043a\u043e\u043f\u0430\u043d \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 <code>mscorlib<\/code> \u0438 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043a\u0430\u043a \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0439\u0448\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code>internal<\/code>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 mscorlib, \u043e \u0442\u0430\u043a\u043e\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u0431\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0437\u043d\u0430\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a\u043e\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0438\u043d\u0443\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 StringBuilder? \u042d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0435\u0433\u043e \u0441\u0443\u0442\u044c: \u043a\u0430\u043a \u043e\u043d \u0441\u0430\u043c, \u0442\u0430\u043a \u0438 \u0442\u043e, \u043d\u0430 \u0447\u0435\u043c \u043e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d (\u0430 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 <code>char[]<\/code>) \u2014 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u043c\u0438. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438: \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e (\u0445\u043e\u0442\u044c \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e) \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u0443\u0447\u0443 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0448\u0430\u043d\u0441\u044b \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u043f\u043e \u043a\u044d\u0448\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b \u043a StringBuilder \u2014 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a. \u0422.\u0435. \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 &#171;\u0437\u0443\u0431 \u0434\u0430\u044e&#187; \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u043d\u0435\u0435 100 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<p>  <\/p>\n<pre><code>    $\"{x} is in range [{min};{max}]\"<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0445\u0443\u0436\u0435 \u0447\u0435\u043c \u0440\u0443\u0447\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 StringBuilder? \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: \u0432\u0441\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043c\u0435\u0441\u0442\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0412\u0435\u0434\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 <code>string.Format<\/code> \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 <code>StringBuilder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (SourceString.Length + args.Length * 8) \u0438 \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0443\u0433\u0430\u0434\u0430\u043d\u0430, \u0442\u043e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0435\u0449\u0435 \u043e\u0434\u0438\u043d <code>StringBuilder<\/code>, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0410 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443: \u0430 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0440\u0430\u043d\u0436\u0438\u0440\u0441\u0442\u0432\u043e \u0438 \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e. \u0412\u043e\u0442 \u0435\u0441\u043b\u0438 \u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043a\u0443\u0447\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u044b \u0431\u044b \u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0442\u0438\u043f \u0438\u0437 \u043d\u0435\u0434\u0440 <code>mscorlib<\/code>:<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043b\u0430\u0441\u0441 ValueStringBuilder<\/strong><br \/>  <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/efebb38f3c18425c57f94ff910a50e038d13c848\/src\/mscorlib\/shared\/System\/Text\/ValueStringBuilder.cs\">\/src\/mscorlib\/shared\/System\/Text\/ValueStringBuilder<\/a><\/p>\n<p>  <\/p>\n<pre><code>    internal ref struct ValueStringBuilder     {         \/\/ \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432         private char[] _arrayToReturnToPool;         \/\/ \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c         private Span&lt;char&gt; _chars;         private int _pos;         \/\/ \u0442\u0438\u043f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u0438\u0437\u0432\u043d\u0435, \u0434\u0435\u043b\u0438\u0433\u0438\u0440\u0443\u044f \u0432\u044b\u0431\u043e\u0440 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435         public ValueStringBuilder(Span&lt;char&gt; initialBuffer)         {             _arrayToReturnToPool = null;             _chars = initialBuffer;             _pos = 0;         }          public int Length         {             get =&gt; _pos;             set             {                 int delta = value - _pos;                 if (delta &gt; 0)                 {                     Append('\\0', delta);                 }                 else                 {                     _pos = value;                 }             }         }          \/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 - \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432         public override string ToString()         {             var s = new string(_chars.Slice(0, _pos));             Clear();             return s;         }          \/\/ \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0433\u0430\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432         \/\/ \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439: \u043f\u0443\u0442\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f         public void Insert(int index, char value, int count)         {             if (_pos &gt; _chars.Length - count)             {                 Grow(count);             }              int remaining = _pos - index;             _chars.Slice(index, remaining).CopyTo(_chars.Slice(index + count));             _chars.Slice(index, count).Fill(value);             _pos += count;         }          [MethodImpl(MethodImplOptions.AggressiveInlining)]         public void Append(char c)         {             int pos = _pos;             if (pos &lt; _chars.Length)             {                 _chars[pos] = c;                 _pos = pos + 1;             }             else             {                 GrowAndAppend(c);             }         }          [MethodImpl(MethodImplOptions.NoInlining)]         private void GrowAndAppend(char c)         {             Grow(1);             Append(c);         }          \/\/ \u0415\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e         \/\/ \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430         \/\/ \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0441\u043b\u0438 \u0431\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b         \/\/ \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0447\u0442\u043e\u0431\u044b \u043f\u0443\u043b \u043d\u0435 \u0431\u044b\u043b \u0431\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c         [MethodImpl(MethodImplOptions.NoInlining)]         private void Grow(int requiredAdditionalCapacity)         {             Debug.Assert(requiredAdditionalCapacity &gt; _chars.Length - _pos);              char[] poolArray = ArrayPool&lt;char&gt;.Shared.Rent(Math.Max(_pos + requiredAdditionalCapacity, _chars.Length * 2));              _chars.CopyTo(poolArray);              char[] toReturn = _arrayToReturnToPool;             _chars = _arrayToReturnToPool = poolArray;             if (toReturn != null)             {                 ArrayPool&lt;char&gt;.Shared.Return(toReturn);             }         }          [MethodImpl(MethodImplOptions.AggressiveInlining)]         private void Clear()         {             char[] toReturn = _arrayToReturnToPool;             this = default; \/\/ for safety, to avoid using pooled array if this instance is erroneously appended to again             if (toReturn != null)             {                 ArrayPool&lt;char&gt;.Shared.Return(toReturn);             }         }          \/\/ \u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b: \u0441 \u043d\u0438\u043c\u0438 \u0438 \u0442\u0430\u043a \u0432\u0441\u0435 \u044f\u0441\u043d\u043e         private void AppendSlow(string s);         public bool TryCopyTo(Span&lt;char&gt; destination, out int charsWritten);         public void Append(string s);         public void Append(char c, int count);         public unsafe void Append(char* value, int length);         public Span&lt;char&gt; AppendSpan(int length);     }<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 \u0441\u0445\u043e\u0434\u0435\u043d \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u043e\u043c <code>StringBuilder<\/code>, \u043e\u0431\u043b\u0430\u0434\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e: \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c. \u0422.\u0435. \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u0410 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 <code>ref<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043f\u0438\u0441\u0430\u043d \u043a \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c: \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u0422.\u0435. \u0432\u044b\u0432\u043e\u0434 \u0435\u0433\u043e \u044d\u043a\u043c\u0435\u043f\u043b\u044f\u0440\u043e\u0432 \u0432 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435. \u041a \u0447\u0435\u043c\u0443 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0438\u0441\u0435\u0434\u0430\u043d\u0438\u044f? \u0414\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043b\u0430\u0441\u0441 <code>StringBuilder<\/code>, \u0441\u0443\u0442\u044c \u043a\u043e\u0442\u043e\u043e\u0433\u043e \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043b\u0438:<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043b\u0430\u0441\u0441 StringBuilder<\/strong> <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/68f72dd2587c3365a9fe74d1991f93612c3bc62a\/src\/mscorlib\/src\/System\/Text\/StringBuilder.cs#L47-L62\">\/src\/mscorlib\/src\/System\/Text\/StringBuilder.cs<\/a><\/p>\n<p>  <\/p>\n<pre><code>public sealed class StringBuilder : ISerializable {     \/\/ A StringBuilder is internally represented as a linked list of blocks each of which holds     \/\/ a chunk of the string.  It turns out string as a whole can also be represented as just a chunk,     \/\/ so that is what we do.     internal char[] m_ChunkChars;                \/\/ The characters in this block     internal StringBuilder m_ChunkPrevious;      \/\/ Link to the block logically before this block     internal int m_ChunkLength;                  \/\/ The index in m_ChunkChars that represent the end of the block     internal int m_ChunkOffset;                  \/\/ The logical offset (sum of all characters in previous blocks)     internal int m_MaxCapacity = 0;      \/\/ ...      internal const int DefaultCapacity = 16;<\/code><\/pre>\n<p>  <\/p>\n<p>StringBuilder \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0422.\u0435. \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0441\u0430\u043c StringBuilder \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u043a\u0441\u0442\u0430\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438: \u0435\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 16-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e). \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043e \u0442\u0438\u043f\u0435 ValueStringBuilder: capacity \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442.\u043a. \u043e\u043d \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043f\u043b\u044e\u0441 \u043e\u043d \u0441\u0430\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u041a\u0430\u043a \u0438\u0442\u043e\u0433 \u0432\u0435\u0441\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0438\u043f\u0430 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u043d\u044b\u043c. \u041d\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u0443\u0447\u0435? \u041d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0435\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043a\u0443\u0447\u0435. \u041d\u043e \u0432\u044b \u043c\u043d\u0435 \u0441\u043a\u0430\u0436\u0438\u0442\u0435: \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f ValueStringBuilder (\u0438\u043b\u0438 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439: \u0441\u0430\u043c \u043e\u043d internal \u0438 \u043d\u0430\u043c \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d) \u0432\u0441\u0435\u0433\u0434\u0430? \u041e\u0442\u0432\u0435\u0442 \u0442\u0430\u043a\u043e\u0439: \u043d\u0430\u0434\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0430\u043c\u0438 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f. \u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430? \u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e \u0434\u043b\u0438\u043d\u0435? \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 &#171;\u0434\u0430&#187; \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u043c\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e StringBuilder. \u0418\u043d\u0430\u0447\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  <\/p>\n<h4 id=\"valuelistbuilder\">ValueListBuilder<\/h4>\n<p>  <\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u2014 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u2014 \u044d\u0442\u043e \u0442\u0438\u043f <code>ValueListBuilder<\/code>. \u0421\u043e\u0437\u0434\u0430\u043d \u043e\u043d \u0434\u043b\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043e\u0442\u0434\u0430\u0442\u044c \u0435\u0435 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c: \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 <code>ValueStringBuilder<\/code>. \u0414\u0430 \u0438 \u0440\u0435\u0448\u0435\u043d\u0430 \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/dbaf2957387c5290a680c8918779683194137b1d\/src\/System.Private.CoreLib\/shared\/System\/Collections\/Generic\/ValueListBuilder.cs\">ValueListBuilder.cs<\/a><\/strong><\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e, \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u044b\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u044b \u0440\u0435\u0448\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 <code>List<\/code>, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0438 \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0442\u0435\u0440\u044f\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <code>List<\/code> \u043f\u043e\u0432\u0438\u0441\u0430\u0435\u0442 \u0432 \u043a\u0443\u0447\u0435, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043f\u043e\u0432\u0438\u0441\u0430\u044e\u0442 \u0432 \u043a\u0443\u0447\u0435 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0441 \u043d\u0438\u043c\u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0435\u043d\u0430: \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>ValueStringBuilder<\/code> \u0440\u0435\u0448\u0435\u043d\u0430 \u043e\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 Microsoft: \u043a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>internal<\/code>.<\/p>\n<p>  <\/p>\n<h3 id=\"pravila-i-praktika-ispolzovaniya\">\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0441\u0443\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e &#171;\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f&#187; \u0441 \u043d\u0438\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043f\u0430\u0440\u0443-\u0442\u0440\u043e\u0439\u043a\u0443, \u0430 \u043b\u0443\u0447\u0448\u0435 \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445. \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0435\u0440\u043f\u043d\u0443\u0442\u044c \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0438\u043f\u0435 <code>Span<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u0442\u043e \u043d\u0430 \u0442\u0438\u043f\u0435 <code>ReadOnlySpan<\/code>;<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e \u0432\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 <em>\u043e\u0431\u044f\u0437\u0430\u043d<\/em> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c <code>ReadOnlySpan&lt;char&gt;<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u043d: \u044d\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e. \u0412\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0443, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043a\u043e\u0433\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0441\u043a\u0430\u0436\u0435\u043c, 10\u041a\u0431 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c), \u0442\u043e \u0432\u044b \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>Span&lt;TType&gt; buf = stackalloc TType[size]<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, TType \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0442.\u043a. <code>stackalloc<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043b\u0438\u0431\u043e \u043a <code>Memory<\/code> \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-rabotaet-span\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Span<\/h3>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Span \u0438 \u0447\u0442\u043e \u0432 \u043d\u0435\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e. \u0410 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0435\u0441\u0442\u044c \u043e \u0447\u0435\u043c: \u0441\u0430\u043c \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0432\u0435\u0440\u0441\u0438\u0438: \u0434\u043b\u044f .NET Core 2.0+ \u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/38403e661a4202ca4c8a72e4bbd9a263bddeb891\/src\/System.Private.CoreLib\/shared\/System\/Span.Fast.cs\">Span.Fast.cs, .NET Core 2.0<\/a><\/strong><\/p>\n<p>  <\/p>\n<pre><code>public readonly ref partial struct Span&lt;T&gt; {     \/\/\/ \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 .NET \u0438\u043b\u0438 \u0447\u0438\u0441\u0442\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c     internal readonly ByReference&lt;T&gt; _pointer;     \/\/\/ \u0414\u043b\u0438\u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e     private readonly int _length;     \/\/ ... }<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b ??? [decompiled]<\/strong><\/p>\n<p>  <\/p>\n<pre><code>public ref readonly struct Span&lt;T&gt; {     private readonly System.Pinnable&lt;T&gt; _pinnable;     private readonly IntPtr _byteOffset;     private readonly int _length;     \/\/ ... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e <em>\u0431\u043e\u043b\u044c\u0448\u043e\u0439<\/em> .NET Framework \u0438 .NET Core 1.* \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 .NET Core 2.0+) \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0442\u0430\u0449\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c: \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430. \u0422.\u0435., \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <code>Span<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET \u043a\u0430\u043a \u0441 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0430\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u043f\u043e\u043b\u044f. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 \u044d\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 managed \u043e\u0431\u044a\u0435\u043a\u0442. \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u044d\u0442\u043e \u2014 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 <code>char<\/code>, \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u2014 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430). \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0442\u0440\u0435\u0442\u044c\u0435 \u043f\u043e\u043b\u0435 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 <code>Span<\/code> \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a:<\/p>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/2b50bba8131acca2ab535e144796941ad93487b7\/src\/System.Private.CoreLib\/shared\/System\/MemoryExtensions.Fast.cs#L409-L416\">coreclr::src\/System.Private.CoreLib\/shared\/System\/MemoryExtensions.Fast.cs<\/a><\/strong><\/p>\n<p>  <\/p>\n<pre><code>public static ReadOnlySpan&lt;char&gt; AsSpan(this string text) {     if (text == null)         return default;      return new ReadOnlySpan&lt;char&gt;(ref text.GetRawStringData(), text.Length); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0413\u0434\u0435 <code>string.GetRawStringData()<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439 <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/2b50bba8131acca2ab535e144796941ad93487b7\/src\/System.Private.CoreLib\/src\/System\/String.CoreCLR.cs#L16-L23\">coreclr::src\/System.Private.CoreLib\/src\/System\/String.CoreCLR.cs<\/a><\/strong><\/p>\n<p>  <\/p>\n<p><strong>\u0424\u0430\u0439\u043b \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c GetRawStringData <a href=\"https:\/\/github.com\/dotnet\/coreclr\/blob\/2b50bba8131acca2ab535e144796941ad93487b7\/src\/System.Private.CoreLib\/shared\/System\/String.cs#L462\">coreclr::src\/System.Private.CoreLib\/shared\/System\/String.cs<\/a><\/strong><\/p>\n<p>  <\/p>\n<pre><code>public sealed partial class String :     IComparable, IEnumerable, IConvertible, IEnumerable&lt;char&gt;,     IComparable&lt;string&gt;, IEquatable&lt;string&gt;, ICloneable {      \/\/     \/\/ These fields map directly onto the fields in an EE StringObject.  See object.h for the layout.     \/\/     [NonSerialized] private int _stringLength;      \/\/ For empty strings, this will be '\\0' since     \/\/ strings are both null-terminated and length prefixed     [NonSerialized] private char _firstChar;      internal ref char GetRawStringData() =&gt; ref _firstChar; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422.\u0435. \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043b\u0435\u0437\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u043e\u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f <code>ref char<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c GC \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f GC.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438: \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f <code>Span<\/code>, \u0442\u043e \u043d\u0435\u043a\u0438\u0439 \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 JIT \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u044d\u0442\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 <code>Span<\/code>. \u0410 \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432 \u0433\u043b\u0430\u0432\u0435 \u043f\u0440\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<h3 id=\"spant-kak-vozvraschaemoe-znachenie\">Span[T] \u043a\u0430\u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  <\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u044e \u0438\u0434\u0438\u043b\u043b\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u043e <code>Span<\/code>, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435, \u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code>unsafe void Main() {     var x = GetSpan(); }  public Span&lt;byte&gt; GetSpan() {     Span&lt;byte&gt; reff = new byte[100];     return reff; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0442\u043e \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u0440\u0443\u0433\u043e\u0439:<\/p>\n<p>  <\/p>\n<pre><code>unsafe void Main() {     var x = GetSpan(); }  public Span&lt;byte&gt; GetSpan() {     Span&lt;byte&gt; reff = stackalloc byte[100];     return reff; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443, \u044f \u043f\u0440\u043e\u0448\u0443 \u0432\u0430\u0441 \u0441\u0430\u043c\u0438\u043c \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u043d\u0435\u0441\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0434\u043e\u0433\u0430\u0434\u043a\u0438 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a, \u0433\u043b\u0430\u0432\u0443 \u043f\u0440\u043e \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u044f \u043f\u043e \u0432\u0438\u043d\u0442\u0438\u043a\u0430\u043c \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043d\u0435 \u0437\u0440\u044f. \u0412\u0435\u0434\u044c \u0434\u0430\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0442\u043e\u0434, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0447\u0435\u0440\u0435\u0437 x[0.99] \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043a\u043e\u0434, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e \u0440\u0443\u043a\u0430\u043c, \u0432\u044b\u0434\u0430\u0432 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <code>CS8352 Cannot use local 'reff' in this context because it may expose referenced variables outside of their declaration scope<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432: \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u0447\u0443\u0436\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u0438\u043b\u0438 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"esli-poyavilis-voprosy\">\u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e <code>Span&lt;T&gt;<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043c. \u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u0441\u0432\u0435\u0436\u0438\u0435 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c use cases \u043e\u0447\u0435\u043d\u044c \u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<p>  <\/p>\n<blockquote>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u0441\u044e \u043a\u043d\u0438\u0433\u0443<\/h3>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3q\/6g\/qa\/3q6gqaz40qx-jzscjf3jbxatxhg.png\"> CLR Book: <a href=\"https:\/\/github.com\/sidristij\/dotnetbook\/\">GitHub<\/a><\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/eo\/6g\/eo\/eo6geog0tg5ernqmv2lcmufefta.png\"> \u0420\u0435\u043b\u0438\u0437 0.5.0 \u043a\u043d\u0438\u0433\u0438, PDF: <a href=\"https:\/\/github.com\/sidristij\/dotnetbook\/releases\/tag\/0.5.0\">GitHub Release<\/a><\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \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\/post\/418911\/\"> https:\/\/habr.com\/post\/418911\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/418911\/\" class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" width=\"350\" src=\"https:\/\/habrastorage.org\/webt\/34\/ua\/e6\/34uae6usmglyw10vxga3sgfgh8c.jpeg\" align=\"left\"> \u0421 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 .NET CLR, \u0438 .NET \u0432 \u0446\u0435\u043b\u043e\u043c (\u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u043e\u043a\u043e\u043b\u043e 200 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u043d\u0438\u0433\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438).<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u044f\u0437\u044b\u043a, \u0442\u0430\u043a \u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442: \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0435\u0441\u043b\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e-\u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442? \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043d\u0430\u043c \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0431\u0443\u0434\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u044d\u0442\u043e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u0440\u0430\u043f\u043f\u0435\u0440\u044b \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0418 \u043c\u0430\u0440\u0448\u0430\u043b\u043b\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>stackallloc<\/code>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u0435 \u043f\u0440\u043e \u0441\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044f\u0437\u044b\u043a\u0430 C# \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u0437 \u043c\u0438\u0440\u0430 C++ (\u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0438 \u044f), \u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 (\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0448\u0435\u043b \u0438\u0437 JavaScript). \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442? \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043b\u044e\u0434\u0438 \u0441\u043e \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c, \u0431\u043b\u0438\u0437\u043a\u0438\u043c \u043f\u043e \u0434\u0443\u0445\u0443 \u043a C\/C++ \u0438 \u0443\u0436 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u2014 \u043a \u044f\u0437\u044b\u043a\u0443 \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0421\u0442\u0430\u0442\u044c\u044f \u0445\u043e\u0442\u044c \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0432 \u0442\u0435\u043c\u0443 Span&lt;T&gt; \u0438 Memory&lt;T&gt;  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/post\/418911\/\">Span&lt;T&gt;: \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 .NET<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/420051\/\">Span&lt;T&gt; \u0438 ReadOnlyMemory&lt;T&gt;<\/a><\/li>\n<li>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Span&lt;T&gt; \u0438 Memory&lt;T&gt;<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-287790","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/287790","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=287790"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/287790\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=287790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=287790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=287790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}