Project Icon

StructLinq

高效低耗的C# LINQ替代方案

StructLinq是一个创新的C#库,通过结构体实现LINQ概念,显著降低内存占用并提升性能。该项目引入IRefStructEnumerable接口,优化大型结构体处理,并提供丰富的LINQ扩展方法。StructLinq支持零内存分配操作,兼容BCL类型,在多种场景下性能优于标准LINQ。这个开源项目为追求高效数据处理的C#开发者提供了强大的工具。

StructLinq

GitHub发布
Nuget Nuget
构建状态 持续集成
GitHub星标 GitHub分支 许可证

在C#中实现LINQ概念,使用结构体来大幅减少内存分配并提高性能。 引入IRefStructEnumerable以提高当元素为大型结构体时的性能。



安装

此库通过NuGet分发。 要安装StructLinq

PM> Install-Package StructLinq

使用

StructLinq大量使用泛型概念和结构体"特化"。

using StructLinq;
 
int[] array = new [] {1, 2, 3, 4, 5};

int result = array
                .ToStructEnumerable()
                .Where(x => (x & 1) == 0, x=>x)
                .Select(x => x *2, x => x)
                .Sum();

x=>x用于避免装箱(和分配)并帮助推断泛型类型参数。 你还可以通过为Where谓词和select函数使用结构体来提高性能。

性能

所有基准测试结果在这里。 例如,以下LINQ序列:

   list
     .Where(x => (x & 1) == 0)
     .Select(x => x * 2)
     .Sum();

可以替换为:

  list
    .ToStructEnumerable()
    .Where(x => (x & 1) == 0)
    .Select(x => x * 2)
    .Sum();

或者如果你想要零分配,可以使用:

 list
   .ToStructEnumerable()
   .Where(x => (x & 1) == 0, x=>x)
   .Select(x => x * 2, x=>x)
   .Sum(x=>x);

或者如果你想要零分配和更好的性能,可以使用:

  var where = new WherePredicate();
  var select = new SelectFunction();
  list
    .ToStructEnumerable()
    .Where(ref @where, x => x)
    .Select(ref @select, x => x, x => x)
    .Sum(x => x);

基准测试结果如下:


BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
Intel Core i7-8750H CPU 2.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=5.0.101
  [Host]     : .NET Core 5.0.1 (CoreCLR 5.0.120.57516, CoreFX 5.0.120.57516), X64 RyuJIT
  DefaultJob : .NET Core 5.0.1 (CoreCLR 5.0.120.57516, CoreFX 5.0.120.57516), X64 RyuJIT


方法平均值误差标准差比率Gen 0Gen 1Gen 2分配
LINQ65.116 μs0.6153 μs0.5756 μs1.00---152 B
StructLinqWithDelegate26.146 μs0.2402 μs0.2247 μs0.40---96 B
StructLinqWithDelegateZeroAlloc27.854 μs0.0938 μs0.0783 μs0.43----
StructLinqZeroAlloc6.872 μs0.0155 μs0.0137 μs0.11----

StructLinq明显比默认的LINQ实现更快。

特性

对于IStructEnumerable,可以使用foreach进行零分配的鸭子类型。

BCL

以下类有StructLinq扩展方法用于IStructEnumerable

转换器

以下转换器可用于:

LINQ扩展

以下扩展可用于:

  • Aggregate
  • All
  • Any
  • Concat
  • Contains
  • Count
  • Distinct零分配
  • ElementAt
  • ElementAtOrDefault
  • Empty
  • Except零分配
  • First
  • FirstOrDefault
  • Intersect零分配
  • Last
  • LastOrDefault
  • Max
  • Min
  • OrderBy零分配
  • OrderByDescending
  • Range
  • Repeat
  • Reverse零分配
  • Select
  • SelectMany
  • Skip
  • SkipWhile
  • Sum
  • Take
  • TakeWhile
  • Union零分配
  • Where

其他扩展

  • LongCount
  • UIntCount
  • Order
  • TryFirst

IRefStructEnumerable

    public interface IRefStructEnumerable<out T, out TEnumerator>
        where TEnumerator : struct, IRefStructEnumerator<T>
    {
        TEnumerator GetEnumerator();
    }

    public interface IRefStructEnumerator<T>
    {
        bool MoveNext();

        void Reset();

        ref T Current { get; }
    }

ref Current允许避免复制。当T是一个大型结构体时,这应该非常有用。

对于IRefStructEnumerable,可以使用带refforeach进行零分配的鸭子类型。

BCL

以下类有StructLinq扩展方法用于IRefStructEnumerable

转换器

以下转换器可用于:

LINQ扩展

以下扩展可用于:

  • All
  • Any
  • Concat
  • Contains
  • Count
  • Distinct
  • ElementAt
  • ElementAtOrDefault
  • Except
  • First
  • FirstOrDefault
  • Intersect
  • Last
  • Select
  • Skip
  • SkipWhile
  • Sum
  • Take
  • TakeWhile
  • Union
  • Where

其他扩展

  • LongCount
  • UIntCount
  • TryFirst
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号