日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

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

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

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

推薦一個開源庫,其功能已經完全包含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

主站蜘蛛池模板: 国产美女极品在线 | 99re在线视频精品7 | 日韩在线观看自拍网址视频免费 | 精品国产国产自在线观看 | 国产永精品亚洲精品 | 日韩在线观看视频免费 | 国产初高中生视 | 九九中文字幕国产 | 日本手机在线视频 | 国产精品免费精品自在线观看 | 亚洲精品资源电影在线观看 | 国产高清不卡在线观看 | 俺来也欧美亚洲a∨在线 | 女女同性女同一区二区三区 | 厨房里征服美艳老师 | 欧美一区二区三区四区日日 | 国产护士va在线观看 | 欧美特黄一级 | 国色天香天天影院综合网 | 成年免费网站 | 国产在线精品一区二区高清 | 日本亚洲中文字幕不卡 | 欧美日韩国产另类激情一区 | 殴美亚洲日韩国产一区三区 | 国产制服国产制服一区二区 | 国产精品成人va在线观看 | 欧美精品在线视频中文 | 欧美激情免费一区二区三区 | 国产欧美精品一区二区三区四区 | 日韩乱伦一二三区 | 日本乱码一区二区三区视频 | 精品国产日韩一区三区 | 秋霞影视免费播放手机版 | 在线亚洲欧美制服中文字幕 | 成年人免费色 | 成人国产综合三级 | 欧美日韩国产伦理 | 国产不卡一区不卡二区不卡三区 | 日韩一级欧美一级一级国产 | 欧美aa | 国产乱子伦视频在线播放 |