日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

ZLinq:意在替代Linq的高性能.Net開源庫

admin
2025年3月20日 18:8 本文熱度 374

推薦一個開源庫,其功能已經完全包含LINQ的所有方法,完全可以替代Linq。而且其有更高的性能和低內存占用的特點。

?

01

項目簡介

ZLinq 是一個由 Cysharp 團隊開發的開源項目,目標是為所有 .NET 平臺和 Unity 提供零分配的 LINQ 實現。它通過利用 Span 和 SIMD 技術,優化了 LINQ 的性能,同時提供了對樹形結構(如文件系統、JSON、游戲對象等)的查詢支持。

通過一行代碼,調用AsValueEnumerable() 方法,用戶可以將任何Linq轉換為 ZLinq。

using ZLinq;


var seq = source

    .AsValueEnumerable() // 添加此代碼

    .Where(x => x % 2 == 0)

    .Select(x => x * 3);

02

核心特征

零分配 LINQ

傳統的 LINQ 實現雖然強大,但在處理大量數據時可能會因為頻繁的內存分配而導致性能瓶頸。ZLinq 通過結構體(struct)的方式實現可枚舉集合,避免了傳統 LINQ 中由于頻繁創建對象而導致的內存分配問題。

對 Span 的支持

ZLinq 充分利用了 .NET 9/C# 13 中引入的 allows ref struct 特性,支持對 Span 的操作。這意味著用戶可以在支持該特性的環境中,對 Span 類型進行高效的 LINQ 查詢操作。

LINQ to SIMD

ZLinq 自動應用 SIMD(單指令多數據)優化,以提升性能。用戶可以通過自定義方式進一步優化 SIMD 的使用,以滿足特定需求。

LINQ to Tree

ZLinq 擴展了 LINQ 的概念,使其能夠應用于樹形結構的查詢。它提供了類似 LINQ to XML 的軸操作(如 Ancestors、Children、Descendants、BeforeSelf 和 AfterSelf),可以對文件系統、JSON、Unity 的 GameObject 等樹形結構進行查詢。


03

入門指南

1、AsValueEnumerable(),即可使用 ZLinq 的零分配 LINQ。

using ZLinq;


var source = new int[] { 1, 2, 3, 4, 5 };


// 調用 AsValueEnumerable 以應用 ZLinq

var seq1 = source.AsValueEnumerable().Where(x => x % 2 == 0);


// 也可以應用于 Span(僅在支持 allows ref struct 的 .NET 9/C# 13 環境中)

Span<int> span = stackalloc int[5] { 1, 2, 3, 4, 5 };

var seq2 = span.AsValueEnumerable().Select(x => x * x);

2、LINQ to Tree
LINQ to XML 將圍繞軸進行查詢的概念引入到了 C# 中。即使你不使用 XML,類似的 API 也被納入了 Roslyn,并有效地用于探索語法樹。ZLinq 擴展了這一概念,使其適用于任何可以被視為樹形結構的對象,允許應用 Ancestors、Children、Descendants、BeforeSelf 和 AfterSelf。
具體來說,通過定義一個實現了以下接口的結構體,即可使其可迭代:

public interface ITraverser<TTraverser, T> : IDisposable

    where TTraverser : struct, ITraverser<TTraverser, T> // 自身

{

    T Origin { get; }

    TTraverser ConvertToTraverser(T next); // 用于 Descendants

    bool TryGetHasChild(out bool hasChild); // 可選:優化 Descendants 的使用

    bool TryGetChildCount(out int count);   // 可選:優化 Children 的使用

    bool TryGetParent(out T parent); // 用于 Ancestors

    bool TryGetNextChild(out T child); // 用于 Children | Descendants

    bool TryGetNextSibling(out T next); // 用于 AfterSelf

    bool TryGetPreviousSibling(out T previous); // BeforeSelf

}

3、文件系統

//安裝依賴庫

dotnet add package ZLinq.FileSystem?

using ZLinq;


var root = new DirectoryInfo("C:\\Program Files (x86)\\Steam");


// FileSystemInfo(FileInfo/DirectoryInfo) 可以調用 `Ancestors`、`Children`、`Descendants`、`BeforeSelf`、`AfterSelf`

var allDlls = root

    .Descendants()

    .OfType(default(FileInfo)!)

    .Where(x => x.Extension == ".dll");


var grouped = allDlls

    .GroupBy(x => x.Name)

    .Select(x => new { FileName = x.Key, Count = x.Count() })

    .OrderByDescending(x => x.Count);


foreach (var item in grouped)

{

    Console.WriteLine(item);

}

4、JSON(System.Text.Json)

//安裝依賴庫

dotnet add package ZLinq.Json

using ZLinq;


// System.Text.Json 的 JsonNode 是 LINQ to JSON 的目標(不是 JsonDocument/JsonElement)。

var json = JsonNode.Parse("""

{

    "nesting": {

      "level1": {

        "description": "First level of nesting",

        "value": 100,

        "level2": {

          "description": "Second level of nesting",

          "flags": [true, false, true],

          "level3": {

            "description": "Third level of nesting",

            "coordinates": {

              "x": 10.5,

              "y": 20.75,

              "z": -5.0

            },

            "level4": {

              "description": "Fourth level of nesting",

              "metadata": {

                "created": "2025-02-15T14:30:00Z",

                "modified": null,

                "version": 2.1

              },

              "level5": {

                "description": "Fifth level of nesting",

                "settings": {

                  "enabled": true,

                  "threshold": 0.85,

                  "options": ["fast", "accurate", "balanced"],

                  "config": {

                    "timeout": 30000,

                    "retries": 3,

                    "deepSetting": {

                      "algorithm": "advanced",

                      "parameters": [1, 1, 2, 3, 5, 8, 13]

                    }

                  }

                }

              }

            }

          }

        }

      }

    }

}

""");


// JsonNode

var origin = json!["nesting"]!["level1"]!["level2"]!;


// JsonNode axis, Children, Descendants, Anestors, BeforeSelf, AfterSelf and ***Self.

foreach (var item in origin.Descendants().Select(x => x.Node).OfType<JsoArray>())

{

    // [true, false, true], ["fast", "accurate", "balanced"], [1, 1, 2, 3, 5, 8, 13]

    Console.WriteLine(item.ToJsonString(JsonSerializerOptions.Web));

}


04

項目地址

https://github.com/Cysharp/ZLinq


- End -

該文章在 2025/3/21 12:46:42 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品欧美亚洲区 | 国产精品狼人 | 日本免费一区二区视频 | 91精品国产福利在线导航 | 日韩欧美一区二区三区视频在线 | 国产精品素人福利 | 九九99靖品 | 亚洲激情午夜福利色色色 | wwwらだ天堂中文在线 | 神马午夜| 亚洲成a人a∨久在线观看 | 亚洲中文字幕高清有码在线 | 91绿奴论坛九色国产 | а√中文在线资源 | 国产精品小电影 | 动感小站+在线视频+丝 | 亚洲欧洲国产精品香蕉网 | 99精品国产福利片在线观看 | 好吊色永久免费视频在线观看 | 国产乱子伦对白视频 | 国产高清超 | 99热这里只有精品国产4 | 欧美视频日韩视 | 国产中文制服丝袜另类 | 国产色综合天天综合网 | 日本三级 | 亚洲日本精品va中文字幕 | 精品国产综合区 | 老汉色影院首页 | 电视剧大全免费全集观看 | 日本搞黄在线观看 | 国产灌醉极品在线观看 | 亚洲男人第一αv网站 | 91全网在线观看国产 | 午夜男女爽爽影院在线 | 欧美视频日韩视 | 国产女主播在线观看 | 国产精品视频大陆精大陆 | 日本有码中文字幕第二页 | 最新高清私人vip视频资源 | 国产一级一片免费播放 |