{"id":489271,"date":"2026-07-31T08:20:18","date_gmt":"2026-07-31T08:20:18","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=489271"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=489271","title":{"rendered":"\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u044f ZLinq: \u043e\u0434\u0438\u043d IEnumerable \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u2014 \u0438 .NET 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 3,9 \u0440\u0430\u0437\u0430"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0423\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 ZLinq, \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u044b\u0432\u043e\u0434\u044b.<\/p>\n<p>ZLinq \u2014 \u0437\u0430\u043c\u0435\u043d\u0430 LINQ, \u043d\u043e \u0431\u0435\u0437 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>foreach (int item in source);<\/p>\n<\/li>\n<li>\n<p>foreach (int item in source.AsValueEnumerable()) \u2014 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043a\u0443\u0447\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435. \u041e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u0435\u0442\u043e\u0434 \u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442: <code>int[]<\/code>, <code>List&lt;int&gt;<\/code> \u0438\u043b\u0438 <code>IEnumerable&lt;int&gt;<\/code>. \u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432. \u041d\u0430 .NET 10 \u0443 <code>IEnumerable&lt;int&gt;<\/code> \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043e\u0448\u0451\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430.<strong>\u00a0<\/strong><\/p>\n<p><strong>\u0411\u0443\u0434\u0435\u0442 4 \u0438\u0441\u0442\u043e\u0440\u0438\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 .NET 8 \u0438 .NET 9 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u2014 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/ComboxSoftDeveloper\/ZLinqSourceKindProof\" rel=\"noopener noreferrer nofollow\">ZLinqSourceKindProof<\/a>. \u0427\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u2116<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u042f\u0434\u0440\u0430\/\u043f\u043e\u0442\u043e\u043a\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0427\u0430\u0441\u0442\u043e\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u0421<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21161<\/p>\n<\/td>\n<td>\n<p align=\"left\">AMD Ryzen 9   5950X<\/p>\n<\/td>\n<td>\n<p align=\"left\">16 \/ 32<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,4 \u0413\u0413\u0446, \u0434\u043e 4,9   \u0432 \u0442\u0443\u0440\u0431\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows 10 1809<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21162<\/p>\n<\/td>\n<td>\n<p align=\"left\">Intel Core   i9-10900KF<\/p>\n<\/td>\n<td>\n<p align=\"left\">10 \/ 20<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,7 \u0413\u0413\u0446, \u0434\u043e 5,3   \u0432 \u0442\u0443\u0440\u0431\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows 10 22H2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21163<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 \u00d7 Intel Xeon   Silver 4314<\/p>\n<\/td>\n<td>\n<p align=\"left\">2\u00d716 \/ 64<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,4 \u0413\u0413\u0446, \u0434\u043e 3,4   \u0432 \u0442\u0443\u0440\u0431\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows Server   2022<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21164<\/p>\n<\/td>\n<td>\n<p align=\"left\">Intel Xeon   W-2255<\/p>\n<\/td>\n<td>\n<p align=\"left\">10 \/ 20<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,7 \u0413\u0413\u0446, \u0434\u043e 4,5   \u0432 \u0442\u0443\u0440\u0431\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows Server   2022<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>ZLinq 1.5.6, BenchmarkDotNet 0.15.8, Release, .NET 8, 9 \u0438 10. \u0427\u0438\u0441\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u2014 \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432. \u041f\u043e\u043b\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/em><\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f 1. \u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430<\/h3>\n<p>\u041e\u0434\u0438\u043d \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u2014 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <code>int[]<\/code>. \u041c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u043c\u0435\u0442\u043e\u0434 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442. \u041e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 \u0432 <a href=\"https:\/\/github.com\/ComboxSoftDeveloper\/ZLinqSourceKindProof\/blob\/master\/Subjects.cs\" rel=\"noopener noreferrer nofollow\">Subjects.cs<\/a>:<\/p>\n<pre><code class=\"cs\">\/\/ ZLinqSourceKindProof, Subjects.cs[MethodImpl(MethodImplOptions.NoInlining)]public static int PlainForeachEnumerable(IEnumerable&lt;int&gt; source){    int total = 0;    foreach (int item in source)    {        total += item;    }    return total;}[MethodImpl(MethodImplOptions.NoInlining)]public static int ZLinqForeachEnumerable(IEnumerable&lt;int&gt; source){    int total = 0;    foreach (int item in source.AsValueEnumerable())    {        total += item;    }    return total;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0428\u0435\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043c\u0435\u0442\u043e\u0434 \u0441 <code>yield return<\/code>. \u041e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443, \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430 \u043d\u0438\u043c \u043d\u0435\u0442, \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0442\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043d\u0438 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e. \u0421\u0442\u0440\u043e\u043a\u0430 \u0432\u0437\u044f\u0442\u0430 \u043a\u0430\u043a \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21161 Ryzen<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21162 i9<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21163 Xeon    Silver<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21164 Xeon W<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">int[]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,98<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">List&lt;int&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,98<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,89<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,83<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,58<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,79<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,65<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,91<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,06<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,18<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IReadOnlyList, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,99<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,81<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,62<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,79<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043c\u0435\u0442\u043e\u0434 \u0441 yield   return<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,59<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,59<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,23<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,60<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 ZLinq \u043a <\/em><code><em>foreach<\/em><\/code><em> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, .NET 10. \u0417\u0430 1 \u043f\u0440\u0438\u043d\u044f\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u0435\u0437 <\/em><code><em>AsValueEnumerable<\/em><\/code><\/p>\n<p>\u0418\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442: 0,98\u20131,00;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435 ZLinq \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435: 0,85\u20130,99;<\/p>\n<\/li>\n<li>\n<p>\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a IEnumerable, \u2014 2,58\u20133,89;<\/p>\n<\/li>\n<li>\n<p>\u0441 \u0442\u0438\u043f\u043e\u043c <code>IReadOnlyList<\/code> \u2014 2,62\u20133,99;<\/p>\n<\/li>\n<li>\n<p>\u0442\u043e\u0442 \u0436\u0435 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u043a\u0430\u043a <code>IEnumerable<\/code>, \u2014 1,18\u20133,06;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 yield return \u2014 1,23\u20131,60.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0430 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438, <a href=\"https:\/\/github.com\/Cysharp\/ZLinq\/blob\/main\/src\/ZLinq\/Linq\/AsValueEnumerable.cs\" rel=\"noopener noreferrer nofollow\">AsValueEnumerable.cs<\/a>:<\/p>\n<pre><code class=\"cs\">\/\/ Cysharp\/ZLinq, src\/ZLinq\/Linq\/AsValueEnumerable.cs\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043epublic static ValueEnumerable&lt;FromEnumerable&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this IEnumerable&lt;T&gt; source)public static ValueEnumerable&lt;FromArray&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this T[] source)public static ValueEnumerable&lt;FromList&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this List&lt;T&gt; source)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, \u0430 \u043d\u0435 \u043f\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443. \u041c\u0430\u0441\u0441\u0438\u0432, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u043a\u0430\u043a <code>IEnumerable&lt;int&gt;<\/code>, \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 <code>FromEnumerable<\/code>, \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<pre><code class=\"cs\">\/\/ Cysharp\/ZLinq, src\/ZLinq\/Linq\/AsValueEnumerable.cs\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043epublic struct FromEnumerable&lt;T&gt; : IValueEnumerator&lt;T&gt;{    readonly CollectionIterator&lt;T&gt; iterator;    FromEnumerableContent content;    public FromEnumerable(IEnumerable&lt;T&gt; source)    {        if (source.GetType() == typeof(T[]))        {            this.iterator = ArrayIterator&lt;T&gt;.Instance;        }        else if (source.GetType() == typeof(List&lt;T&gt;))        {            this.iterator = ListIterator&lt;T&gt;.Instance;        }        else if (source is IReadOnlyList&lt;T&gt;)        {            this.iterator = IReadOnlyListIterator&lt;T&gt;.Instance;        }        \/\/ ... \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u0438 \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0435\u0451 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041f\u043e\u043b\u0435 iterator \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441, \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u2014 \u043e\u0442\u0447\u0451\u0442 <code>sizes<\/code> \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f:<\/p>\n<pre><code class=\"cs\">\/\/ ZLinqSourceKindProof, \u0432\u044b\u0432\u043e\u0434 dotnet run -c Release -f net10.0 -- sizes=== \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 ===\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435            \u0411\u0430\u0439\u0442int[]                   16List&lt;int&gt;               16IEnumerable&lt;int&gt;        24IReadOnlyList&lt;int&gt;      24\u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440                24\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, 1,93\u20133,49: \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0438 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0435 \u2014 \u043d\u0435\u0442.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f 2. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 .NET 8 \u0438 .NET 9 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442<\/h3>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u0437\u0430\u043c\u0435\u0440 \u0438 \u0442\u0430 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u2014 \u043d\u043e \u043d\u0430 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8af\/59f\/9c5\/8af59f9c585b9ddd7b8581893630c08e.png\" alt=\"\u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043d\u0430 .NET 10 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442\u0441\u0442\u0430\u0451\u0442 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430\" title=\"\u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043d\u0430 .NET 10 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442\u0441\u0442\u0430\u0451\u0442 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430\" width=\"1320\" height=\"675\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8af\/59f\/9c5\/8af59f9c585b9ddd7b8581893630c08e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8af\/59f\/9c5\/8af59f9c585b9ddd7b8581893630c08e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043d\u0430 .NET 10 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442\u0441\u0442\u0430\u0451\u0442 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 .NET 8 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,00\u20131,17;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 .NET 9 \u2014 0,87\u20131,03, \u0442\u043e \u0435\u0441\u0442\u044c ZLinq \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 .NET 10 \u2014 2,58\u20133,89.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u043c\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c: \u043f\u0430\u043a\u0435\u0442 \u043e\u0434\u0438\u043d, ZLinq 1.5.6, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435 \u0436\u0435. \u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f 3. \u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c<\/h3>\n<p>\u0418\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c. \u0422\u0435 \u0436\u0435 \u0437\u0430\u043c\u0435\u0440\u044b:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e67\/ec7\/791\/e67ec7791e44cf20ee2b029f328e0d5e.png\" alt=\"Foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 .NET 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 .NET 8, \u0432 3,6\u20134,2 \u0440\u0430\u0437\u0430. \u0423 ZLinq \u0437\u0430 \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,0\u20131,6\" title=\"Foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 .NET 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 .NET 8, \u0432 3,6\u20134,2 \u0440\u0430\u0437\u0430. \u0423 ZLinq \u0437\u0430 \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,0\u20131,6\" width=\"1320\" height=\"675\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e67\/ec7\/791\/e67ec7791e44cf20ee2b029f328e0d5e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e67\/ec7\/791\/e67ec7791e44cf20ee2b029f328e0d5e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><code><em>Foreach<\/em><\/code><em> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 .NET 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 .NET 8, \u0432 3,6\u20134,2 \u0440\u0430\u0437\u0430. \u0423 ZLinq \u0437\u0430 \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,0\u20131,6<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: 898\u20132 408 \u043d\u0441 \u043d\u0430 .NET 8, 251\u2013577 \u043d\u0441 \u043d\u0430 .NET 10;<\/p>\n<\/li>\n<li>\n<p>ZLinq \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445: 1 051\u20132 451 \u043d\u0441 \u0438 976\u20131 488 \u043d\u0441;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 .NET 10 <code>foreach<\/code> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u044f\u043b\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 0,93\u20131,16.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 <code>yield return<\/code>, \u0433\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435\u0442, \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21161 Ryzen<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21162 i9<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21163 Xeon    Silver<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u21164 Xeon W<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">yield return,   .NET 8<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 262<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 268<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 050<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 501<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">yield return,   .NET 9<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 312<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 369<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 692<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 604<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">yield return,   .NET 10<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 261<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 281<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 509<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 708<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u041d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, <\/em><code><em>foreach<\/em><\/code><em> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434 \u0441 <\/em><code><em>yield return<\/em><\/code><\/p>\n<p>\u041c\u0435\u0436\u0434\u0443 .NET 8 \u0438 .NET 10 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,00\u20131,22 \u2014 \u043d\u0430 \u0434\u0432\u0443\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0441\u0442\u0430\u043b\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0433\u0434\u0435 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u044f\u043b \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/p>\n<p>\u041c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c. \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0438 \u0441\u043d\u044f\u0442\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c <a href=\"https:\/\/github.com\/ComboxSoftDeveloper\/ZLinqSourceKindProof\/tree\/master\/Disasm\" rel=\"noopener noreferrer nofollow\">Disasm<\/a> \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041d\u0430 .NET 8 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0437\u043e\u0432\u0430 <code>GetEnumerator<\/code> \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<pre><code class=\"assembly\">\/\/ ZLinqSourceKindProof, Disasm, disasm-Enumerable-net8.0.txt\/\/ PlainForeachEnumerable, Tier1, optimized using Dynamic PGO, \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043eG_M000_IG02:       xor      ebx, ebx       mov      r11, 0xD1FFAB1E       call     [r11]System.Collections.Generic.IEnumerable`1[int]:GetEnumerator()G_M000_IG04:       mov      r8, rcx       mov      r10d, dword ptr [r8+0x08]       cmp      r10d, dword ptr [r8+0x0C]       jae      G_M000_IG19       mov      r14, gword ptr [r8+0x10]       mov      eax, r10d       mov      r15d, dword ptr [r14+4*rax+0x10]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0442\u043e\u043c \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c\u0438 \u2014 \u0438\u043d\u0434\u0435\u043a\u0441, \u0434\u043b\u0438\u043d\u0430, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u041d\u0430 .NET 10 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435\u0442:<\/p>\n<pre><code class=\"assembly\">\/\/ ZLinqSourceKindProof, Disasm, disasm-Enumerable-net10.0.txt\/\/ PlainForeachEnumerable, Tier1, optimized using Synthesized PGO, \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043eG_M000_IG02:       xor      ebx, ebx       mov      rax, 0xD1FFAB1E       cmp      qword ptr [rcx], rax       jne      SHORT G_M000_IG07       mov      eax, dword ptr [rcx+0x08]G_M000_IG03:       cmp      edx, eax       jae      SHORT G_M000_IG06       mov      r8d, edx       add      ebx, dword ptr [rcx+4*r8+0x10]       inc      edx       cmp      edx, eax       jb       SHORT G_M000_IG03<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u0438 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u0446\u0438\u043a\u043b \u0447\u0438\u0442\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e: \u0434\u043b\u0438\u043d\u0430 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e <code>0x08<\/code>, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e <code>0x10<\/code>. \u0412\u044b\u0437\u043e\u0432\u044b <code>GetEnumerator<\/code>, <code>MoveNext<\/code> \u0438 <code>get_Current<\/code> \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0432\u0435\u0442\u043a\u0443 <code>G_M000_IG07<\/code>, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0434\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0435\u0442\u043e\u0434\u0430: 469 \u0431\u0430\u0439\u0442 \u043d\u0430 .NET 8, 263 \u043d\u0430 .NET 9, 193 \u043d\u0430 .NET 10, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445. <\/p>\n<p>\u0427\u0438\u0441\u043b\u043e <code>0xD1FFAB1E<\/code> \u0432 \u043e\u0431\u043e\u0438\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430\u0445 \u2014 \u043d\u0435 \u0430\u0434\u0440\u0435\u0441. \u042d\u0442\u043e \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430: \u043f\u0440\u0438 \u0441\u043d\u044f\u0442\u0438\u0438 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c Disasm \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>DOTNET_JitDisasmDiffable<\/code>, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u044e \u043b\u044e\u0431\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e \u2014 <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/release\/10.0\/src\/coreclr\/jit\/jitconfigvalues.h\" rel=\"noopener noreferrer nofollow\">jitconfigvalues.h<\/a> \u0438 <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/release\/10.0\/src\/coreclr\/jit\/emitxarch.cpp\" rel=\"noopener noreferrer nofollow\">emitxarch.cpp<\/a>. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<p>\u0412 \u0448\u0430\u043f\u043a\u0430\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0438 \u0442\u043e, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440: \u043d\u0430 .NET 8 \u0438 .NET 9 \u044d\u0442\u043e <code>Dynamic PGO<\/code>, \u043d\u0430 .NET 10 \u2014 <code>Synthesized PGO<\/code>. \u0422\u0430\u043a \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f 4. \u0427\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h3>\n<p>\u0412 <a href=\"https:\/\/github.com\/Cysharp\/ZLinq#difference-and-limitation\" rel=\"noopener noreferrer nofollow\">README \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a> \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u044b \u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c:<\/p>\n<pre><code class=\"cs\">\/\/ Cysharp\/ZLinq, README.mdWhen a type is declared as IEnumerable&lt;T&gt; or ICollection&lt;T&gt; rather than concretetypes like T[] or List&lt;T&gt;, generally additional allocations occur when usingforeach. In ZLinq, even when these interfaces are declared, if the actual typeis T[] or List&lt;T&gt;, processing is performed with zero allocation.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423 ZLinq \u043d\u043e\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 <code>foreach<\/code> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422\u0435 \u0436\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u0430\u0451\u0442 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u043e\u0442\u0447\u0451\u0442 <code>alloc<\/code> \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f: \u043e\u043d \u0431\u0435\u0440\u0451\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u0430 \u043d\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u043e\u0439 BenchmarkDotNet, \u0438 \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043d\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 72 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>.NET 8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>.NET 9<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>.NET 10<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">int[]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">List&lt;int&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">40<\/p>\n<\/td>\n<td>\n<p align=\"left\">40<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">IReadOnlyList,   \u0437\u0430 \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043c\u0435\u0442\u043e\u0434 \u0441 yield   return<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0431\u0430\u0439\u0442 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 <\/em><code><em>foreach<\/em><\/code><em> \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0427\u0438\u0441\u043b\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u0430 \u043d\u0435 \u043c\u0430\u0448\u0438\u043d\u044b<\/em><\/p>\n<p>\u0418\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 .NET 8 \u0438 .NET 9 foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c: 32 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, 40 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 .NET 10 \u0432 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043d\u043e\u043b\u044c;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u043e\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 <code>yield return<\/code> \u0442\u043e\u0436\u0435 \u043d\u043e\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0420\u0430\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430 .NET 10 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f, \u0442\u043e \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043d\u0435\u0447\u0435\u0433\u043e. \u0417\u0434\u0435\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0422\u0430\u043a \u043d\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0435 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0421 <code>Where<\/code> \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445: 48 \u0431\u0430\u0439\u0442 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, 72 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435, 56 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 <code>yield return<\/code>. \u0423 ZLinq \u0432 \u044d\u0442\u0438\u0445 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043d\u043e\u043b\u044c.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u2014 \u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0441\u0451 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f: <code>Where<\/code> \u0441 <code>Sum<\/code> \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0434\u0430\u0451\u0442 0,95\u20131,19, <code>Sum<\/code> \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 1,15\u20131,89. \u041e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u0435 \u0432 3,9 \u0440\u0430\u0437\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<h4>\u041f\u043e \u0446\u0438\u0444\u0440\u0430\u043c:<\/h4>\n<ul>\n<li>\n<p>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a int[] \u0438\u043b\u0438 List&lt;int&gt; \u2014 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 ZLinq \u043a foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 0,85\u20131,00;<\/p>\n<\/li>\n<li>\n<p>\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c IEnumerable \u043d\u0430 .NET 10 \u2014 2,58\u20133,89, \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c IReadOnlyList \u2014 2,62\u20133,99;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0430 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430 .NET 8 \u2014 1,00\u20131,17, \u043d\u0430 .NET 9 \u2014 0,87\u20131,03;<\/p>\n<\/li>\n<li>\n<p>foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043c\u0435\u0436\u0434\u0443 .NET 8 \u0438 .NET 10 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u0432 3,6\u20134,2 \u0440\u0430\u0437\u0430, ZLinq \u0437\u0430 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u0432 1,0\u20131,6;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 yield return \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u0442: \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 .NET 10 \u043a .NET 8 \u0440\u0430\u0432\u043d\u043e 1,00\u20131,22;<\/p>\n<\/li>\n<li>\n<p>foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 32 \u0438 40 \u0431\u0430\u0439\u0442 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430 .NET 8 \u0438 .NET 9, \u043d\u0430 .NET 10 \u2014 \u043d\u043e\u043b\u044c; \u0443 ZLinq \u043d\u043e\u043b\u044c \u0432\u0435\u0437\u0434\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c Where \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445: 48 \u0431\u0430\u0439\u0442 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, 72 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435;<\/p>\n<\/li>\n<li>\n<p>Where \u0441 Sum \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u2014 0,95\u20131,19, Sum \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 1,15\u20131,89.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442 \u0435\u0451 \u0447\u0435\u0440\u0435\u0437 ZLinq: \u0441 <code>int[]<\/code> \u0438 <code>List&lt;int&gt;<\/code> \u043f\u0440\u0430\u0432\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0442\u0430\u043c <code>IEnumerable<\/code> \u0438\u043b\u0438 <code>IReadOnlyList<\/code>, \u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439: \u0432 3,0\u20134,4 \u0440\u0430\u0437\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0441\u044f \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>foreach<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 .NET 10 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u0437 AsValueEnumerable: \u043e\u043d \u0442\u0430\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 Where \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 ZLinq: \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 0,95\u20131,19, \u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u043e\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 48 \u0438 72 \u0431\u0430\u0439\u0442;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 .NET 10 \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0442\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 ZLinq \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c: \u0447\u0438\u0441\u043b\u0430 .NET 8 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u043e\u0434 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/ComboxSoftDeveloper\/ZLinqSourceKindProof\" rel=\"noopener noreferrer nofollow\">ZLinqSourceKindProof<\/a> \u2014 \u0437\u0430\u043c\u0435\u0440\u044b, \u0441\u0432\u0435\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044b \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Cysharp\/ZLinq\" rel=\"noopener noreferrer nofollow\">ZLinq<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Cysharp\/ZLinq\/blob\/main\/src\/ZLinq\/Linq\/AsValueEnumerable.cs\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u0438\u043f\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Cysharp\/ZLinq#difference-and-limitation\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Cysharp\/ZLinq\/issues\/186\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 #186: \u0442\u0438\u043f \u0441\u043f\u0440\u044f\u0442\u0430\u043d \u0437\u0430 IReadOnlyList<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Cysharp\/ZLinq\/issues\/189\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 #189: \u043d\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/dotnet\/api\/system.runtime.compilerservices.unsafe.sizeof\" rel=\"noopener noreferrer nofollow\">Unsafe.SizeOf<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438 \u0438 \u0434\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447!<\/strong><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1065192\/\">https:\/\/habr.com\/ru\/articles\/1065192\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0423\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 ZLinq, \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u044b\u0432\u043e\u0434\u044b.ZLinq \u2014 \u0437\u0430\u043c\u0435\u043d\u0430 LINQ, \u043d\u043e \u0431\u0435\u0437 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:foreach (int item in source);foreach (int item in source.AsValueEnumerable()) \u2014 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043a\u0443\u0447\u0435.\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435. \u041e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u0435\u0442\u043e\u0434 \u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442: int[], List&lt;int&gt; \u0438\u043b\u0438 IEnumerable&lt;int&gt;. \u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432. \u041d\u0430 .NET 10 \u0443 IEnumerable&lt;int&gt; \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043e\u0448\u0451\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430.\u00a0\u0411\u0443\u0434\u0435\u0442 4 \u0438\u0441\u0442\u043e\u0440\u0438\u0438:\u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430;\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 .NET 8 \u0438 .NET 9 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442;\u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c;\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445.\u041a\u043e\u0434 \u2014 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 ZLinqSourceKindProof. \u0427\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b:\u2116CPU\u042f\u0434\u0440\u0430\/\u043f\u043e\u0442\u043e\u043a\u0438\u0427\u0430\u0441\u0442\u043e\u0442\u0430\u041e\u0421\u21161AMD Ryzen 9   5950X16 \/ 323,4 \u0413\u0413\u0446, \u0434\u043e 4,9   \u0432 \u0442\u0443\u0440\u0431\u043eWindows 10 1809\u21162Intel Core   i9-10900KF10 \/ 203,7 \u0413\u0413\u0446, \u0434\u043e 5,3   \u0432 \u0442\u0443\u0440\u0431\u043eWindows 10 22H2\u211632 \u00d7 Intel Xeon   Silver 43142\u00d716 \/ 642,4 \u0413\u0413\u0446, \u0434\u043e 3,4   \u0432 \u0442\u0443\u0440\u0431\u043eWindows Server   2022\u21164Intel Xeon   W-225510 \/ 203,7 \u0413\u0413\u0446, \u0434\u043e 4,5   \u0432 \u0442\u0443\u0440\u0431\u043eWindows Server   2022ZLinq 1.5.6, BenchmarkDotNet 0.15.8, Release, .NET 8, 9 \u0438 10. \u0427\u0438\u0441\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u2014 \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432. \u041f\u043e\u043b\u043d\u044b\u0435 \u043e\u0442\u0447\u0451\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.\u0418\u0441\u0442\u043e\u0440\u0438\u044f 1. \u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u041e\u0434\u0438\u043d \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u2014 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 int[]. \u041c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u043c\u0435\u0442\u043e\u0434 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442. \u041e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 \u0432 Subjects.cs:\/\/ ZLinqSourceKindProof, Subjects.cs[MethodImpl(MethodImplOptions.NoInlining)]public static int PlainForeachEnumerable(IEnumerable&lt;int&gt; source){    int total = 0;    foreach (int item in source)    {        total += item;    }    return total;}[MethodImpl(MethodImplOptions.NoInlining)]public static int ZLinqForeachEnumerable(IEnumerable&lt;int&gt; source){    int total = 0;    foreach (int item in source.AsValueEnumerable())    {        total += item;    }    return total;}\u0428\u0435\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043c\u0435\u0442\u043e\u0434 \u0441 yield return. \u041e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443, \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430 \u043d\u0438\u043c \u043d\u0435\u0442, \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0442\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043d\u0438 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e. \u0421\u0442\u0440\u043e\u043a\u0430 \u0432\u0437\u044f\u0442\u0430 \u043a\u0430\u043a \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430.\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c\u21161 Ryzen\u21162 i9\u21163 Xeon    Silver\u21164 Xeon Wint[]0,981,001,001,00List&lt;int&gt;0,980,990,850,99IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u04323,893,832,583,79IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a2,652,913,061,18IReadOnlyList, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u04323,993,812,623,79\u043c\u0435\u0442\u043e\u0434 \u0441 yield   return1,591,591,231,60\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 ZLinq \u043a foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, .NET 10. \u0417\u0430 1 \u043f\u0440\u0438\u043d\u044f\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u0435\u0437 AsValueEnumerable\u0418\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442: 0,98\u20131,00;\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435 ZLinq \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435: 0,85\u20130,99;\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a IEnumerable, \u2014 2,58\u20133,89;\u0441 \u0442\u0438\u043f\u043e\u043c IReadOnlyList \u2014 2,62\u20133,99;\u0442\u043e\u0442 \u0436\u0435 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u043a\u0430\u043a IEnumerable, \u2014 1,18\u20133,06;\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 yield return \u2014 1,23\u20131,60.\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0430 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438, AsValueEnumerable.cs:\/\/ Cysharp\/ZLinq, src\/ZLinq\/Linq\/AsValueEnumerable.cs\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043epublic static ValueEnumerable&lt;FromEnumerable&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this IEnumerable&lt;T&gt; source)public static ValueEnumerable&lt;FromArray&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this T[] source)public static ValueEnumerable&lt;FromList&lt;T&gt;, T&gt; AsValueEnumerable&lt;T&gt;(this List&lt;T&gt; source)\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, \u0430 \u043d\u0435 \u043f\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443. \u041c\u0430\u0441\u0441\u0438\u0432, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u043a\u0430\u043a IEnumerable&lt;int&gt;, \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 FromEnumerable, \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b:\/\/ Cysharp\/ZLinq, src\/ZLinq\/Linq\/AsValueEnumerable.cs\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043epublic struct FromEnumerable&lt;T&gt; : IValueEnumerator&lt;T&gt;{    readonly CollectionIterator&lt;T&gt; iterator;    FromEnumerableContent content;    public FromEnumerable(IEnumerable&lt;T&gt; source)    {        if (source.GetType() == typeof(T[]))        {            this.iterator = ArrayIterator&lt;T&gt;.Instance;        }        else if (source.GetType() == typeof(List&lt;T&gt;))        {            this.iterator = ListIterator&lt;T&gt;.Instance;        }        else if (source is IReadOnlyList&lt;T&gt;)        {            this.iterator = IReadOnlyListIterator&lt;T&gt;.Instance;        }        \/\/ &#8230; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438    }}\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u0438 \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0435\u0451 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041f\u043e\u043b\u0435 iterator \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441, \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u2014 \u043e\u0442\u0447\u0451\u0442 sizes \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f:\/\/ ZLinqSourceKindProof, \u0432\u044b\u0432\u043e\u0434 dotnet run -c Release -f net10.0 &#8212; sizes=== \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 ===\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435            \u0411\u0430\u0439\u0442int[]                   16List&lt;int&gt;               16IEnumerable&lt;int&gt;        24IReadOnlyList&lt;int&gt;      24\u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440                24\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c.\u041d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, 1,93\u20133,49: \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0438 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0435 \u2014 \u043d\u0435\u0442.\u0418\u0441\u0442\u043e\u0440\u0438\u044f 2. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430 .NET 8 \u0438 .NET 9 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442\u0422\u043e\u0442 \u0436\u0435 \u0437\u0430\u043c\u0435\u0440 \u0438 \u0442\u0430 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u2014 \u043d\u043e \u043d\u0430 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445.\u041d\u0430 .NET 8 \u0438 .NET 9 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043d\u0430 .NET 10 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442\u0441\u0442\u0430\u0451\u0442 \u0432 2,58\u20133,89 \u0440\u0430\u0437\u0430\u0418\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:\u043d\u0430 .NET 8 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,00\u20131,17;\u043d\u0430 .NET 9 \u2014 0,87\u20131,03, \u0442\u043e \u0435\u0441\u0442\u044c ZLinq \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435;\u043d\u0430 .NET 10 \u2014 2,58\u20133,89.\u041d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u043c\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c: \u043f\u0430\u043a\u0435\u0442 \u043e\u0434\u0438\u043d, ZLinq 1.5.6, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435 \u0436\u0435. \u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.\u0418\u0441\u0442\u043e\u0440\u0438\u044f 3. \u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0418\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c. \u0422\u0435 \u0436\u0435 \u0437\u0430\u043c\u0435\u0440\u044b:Foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 .NET 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 .NET 8, \u0432 3,6\u20134,2 \u0440\u0430\u0437\u0430. \u0423 ZLinq \u0437\u0430 \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,0\u20131,6\u0418\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: 898\u20132 408 \u043d\u0441 \u043d\u0430 .NET 8, 251\u2013577 \u043d\u0441 \u043d\u0430 .NET 10;ZLinq \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445: 1 051\u20132 451 \u043d\u0441 \u0438 976\u20131 488 \u043d\u0441;\u043d\u0430 .NET 10 foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u044f\u043b\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 0,93\u20131,16.\u041d\u0430 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441 yield return, \u0433\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435\u0442, \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c\u21161 Ryzen\u21162 i9\u21163 Xeon    Silver\u21164 Xeon Wyield return,   .NET 81 2621 2682 0501 501yield return,   .NET 91 3121 3692 6921 604yield return,   .NET 101 2611 2812 5091 708\u041d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 1 024 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434 \u0441 yield return\u041c\u0435\u0436\u0434\u0443 .NET 8 \u0438 .NET 10 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 1,00\u20131,22 \u2014 \u043d\u0430 \u0434\u0432\u0443\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0441\u0442\u0430\u043b\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0433\u0434\u0435 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u044f\u043b \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.\u041c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c. \u041b\u0438\u0441\u0442\u0438\u043d\u0433\u0438 \u0441\u043d\u044f\u0442\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c Disasm \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041d\u0430 .NET 8 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0437\u043e\u0432\u0430 GetEnumerator \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:\/\/ ZLinqSourceKindProof, Disasm, disasm-Enumerable-net8.0.txt\/\/ PlainForeachEnumerable, Tier1, optimized using Dynamic PGO, \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043eG_M000_IG02:       xor      ebx, ebx       mov      r11, 0xD1FFAB1E       call     [r11]System.Collections.Generic.IEnumerable`1[int]:GetEnumerator()G_M000_IG04:       mov      r8, rcx       mov      r10d, dword ptr [r8+0x08]       cmp      r10d, dword ptr [r8+0x0C]       jae      G_M000_IG19       mov      r14, gword ptr [r8+0x10]       mov      eax, r10d       mov      r15d, dword ptr [r14+4*rax+0x10]\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0442\u043e\u043c \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c\u0438 \u2014 \u0438\u043d\u0434\u0435\u043a\u0441, \u0434\u043b\u0438\u043d\u0430, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u041d\u0430 .NET 10 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435\u0442:\/\/ ZLinqSourceKindProof, Disasm, disasm-Enumerable-net10.0.txt\/\/ PlainForeachEnumerable, Tier1, optimized using Synthesized PGO, \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043eG_M000_IG02:       xor      ebx, ebx       mov      rax, 0xD1FFAB1E       cmp      qword ptr [rcx], rax       jne      SHORT G_M000_IG07       mov      eax, dword ptr [rcx+0x08]G_M000_IG03:       cmp      edx, eax       jae      SHORT G_M000_IG06       mov      r8d, edx       add      ebx, dword ptr [rcx+4*r8+0x10]       inc      edx       cmp      edx, eax       jb       SHORT G_M000_IG03\u0421\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u0438 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u0446\u0438\u043a\u043b \u0447\u0438\u0442\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e: \u0434\u043b\u0438\u043d\u0430 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0x08, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e 0x10. \u0412\u044b\u0437\u043e\u0432\u044b GetEnumerator, MoveNext \u0438 get_Current \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0432\u0435\u0442\u043a\u0443 G_M000_IG07, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0434\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0435\u0442\u043e\u0434\u0430: 469 \u0431\u0430\u0439\u0442 \u043d\u0430 .NET 8, 263 \u043d\u0430 .NET 9, 193 \u043d\u0430 .NET 10, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445. \u0427\u0438\u0441\u043b\u043e 0xD1FFAB1E \u0432 \u043e\u0431\u043e\u0438\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430\u0445 \u2014 \u043d\u0435 \u0430\u0434\u0440\u0435\u0441. \u042d\u0442\u043e \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430: \u043f\u0440\u0438 \u0441\u043d\u044f\u0442\u0438\u0438 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c Disasm \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f DOTNET_JitDisasmDiffable, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u044e \u043b\u044e\u0431\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e \u2014 jitconfigvalues.h \u0438 emitxarch.cpp. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432.\u0412 \u0448\u0430\u043f\u043a\u0430\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0438 \u0442\u043e, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440: \u043d\u0430 .NET 8 \u0438 .NET 9 \u044d\u0442\u043e Dynamic PGO, \u043d\u0430 .NET 10 \u2014 Synthesized PGO. \u0422\u0430\u043a \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.\u0418\u0441\u0442\u043e\u0440\u0438\u044f 4. \u0427\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e\u0412 README \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u044b \u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c:\/\/ Cysharp\/ZLinq, README.mdWhen a type is declared as IEnumerable&lt;T&gt; or ICollection&lt;T&gt; rather than concretetypes like T[] or List&lt;T&gt;, generally additional allocations occur when usingforeach. In ZLinq, even when these interfaces are declared, if the actual typeis T[] or List&lt;T&gt;, processing is performed with zero allocation.\u0423 ZLinq \u043d\u043e\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422\u0435 \u0436\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u0430\u0451\u0442 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u043e\u0442\u0447\u0451\u0442 alloc \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f: \u043e\u043d \u0431\u0435\u0440\u0451\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u0430 \u043d\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u043e\u0439 BenchmarkDotNet, \u0438 \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043d\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 72 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445.\u0427\u0442\u043e \u043c\u0435\u0440\u044f\u0435\u043c.NET 8.NET 9.NET 10int[]000List&lt;int&gt;000IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u043232320IEnumerable, \u0437\u0430   \u043d\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a40400IReadOnlyList,   \u0437\u0430 \u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u043232320\u043c\u0435\u0442\u043e\u0434 \u0441 yield   return000\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0431\u0430\u0439\u0442 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 foreach \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-489271","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489271","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=489271"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489271\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}