gpt4 book ai didi

c# - TrySZBinarySearch 在哪里实现的?

转载 作者:行者123 更新时间:2023-12-02 14:44:18 25 4
gpt4 key购买 nike

我在研究一些微性能技术的时候,遇到了,在array.cs file ,在 .net 框架中,对二进制搜索函数的外部引用。

private static extern bool TrySZBinarySearch(Array sourceArray, int sourceIndex, int count, Object value, out int retVal); 

在哪里可以找到该函数的文档?或者更好的是,它是如何实现的?为什么.net中有这么多SZ?

private static extern bool TrySZIndexOf(Array sourceArray, int sourceIndex, int count, Object value, out int retVal); 

private static extern bool TrySZLastIndexOf(Array sourceArray, int sourceIndex, int count, Object value, out int retVal);

sealed class SZArrayHelper { ... }

等等

最佳答案

    [System.Security.SecurityCritical]  // auto-generated
[ResourceExposure(ResourceScope.None)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private static extern bool TrySZBinarySearch(Array sourceArray,
int sourceIndex, int count, Object value, out int retVal);

这是从引用源中检索到的声明。其中拥有.NET框架的绝大多数源代码。您可以下载it here .

属性为 [MethodImpl(MethodImplOptions.InternalCall)] 的方法是用 C++ 编写的,并包含在 CLR 中。 CLR 的源代码也可从 SSCLI20 获得,SSCLI20 是 CLR 的共享源版本,旨在帮助将 .NET 移植到其他操作系统。由于它是在 .NET 2.0 时间范围内发布的,因此它有点过时,但许多主要帮助函数仍然准确。您可以下载it here

您将在 clr/src/vm/ecall.cpp 中找到 TrySZBinarySearch,这是查找 InternalCall 方法的第一个位置。您将看到它映射到 ArrayHelper::TrySZBinarySearch() C++ 方法,您可以在 clr/src/vm/comarrayhelper.cpp 中找到该方法

它没什么特别有趣的,只是一个专门针对各种简单值类型的普通二分搜索算法。您将在 this answer 中找到它是用 C++ 而不是 C# 编写的原因。 .

SZ 是从零开始的一维数组的缩写,是从 C# array[] 声明中获得的数组类型。在 C# 语言中,更广为人知的名称是“向量”。由于它如此常用,所以进行了大量的微观优化。

更新:今天使用 github 上提供的 CoreCLR 源代码更容易看到,函数 is here .

关于c# - TrySZBinarySearch 在哪里实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com