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

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

主站蜘蛛池模板: 亚洲色一区二区三区四区 | 国产精品国内免费一区二区三区 | 免费无毒片在线观看 | 亚洲欧美另类在线一区 | 国产aⅴ一 | 欧美人成中文视频在线观看 | 黑人巨大精品欧美视频一区 | 国产一区二区三区在线播放无 | 国产在线观看精 | 国产精品一区二区含羞草 | 99国产精品婷婷 | 2025中文日产幕无线 | 黑人大战亚洲女在线播放 | 国产精品多人 | 精美日产 | 亚洲一区二区三区在线观看 | 99精品综合 | 亚洲日产在线播 | 欧美日韩一本无线码专区 | 男女日皮视频app | 成人动画在线观看免费污 | 午夜欧美国产一区 | 熟女视频一区二区在线观看 | 国产免国产免费 | 老女人擦 | 成年女性特黄午夜视频免费看 | 国产区免费视频在线观看 | 国产未成女一区二区 | 2025天堂视频精品 | 日本亲与子 | 性插爽视频欧 | 一区二区三区高清视频国产女人 | 三级视频网站在线观看 | 精品人伦一区二区三区蜜 | 亚洲亚洲人成 | aa级亚洲电影 | 99精品成人高清在线观看 | 亚洲一区二区自 | 日本精品中文字幕有码 | 日韩欧美国产另 | 国产精品中文字幕免费观看 |