该TrySZBinarySearch在哪里实现? - c#

on-topic

在研究一些微性能技术时,在.aa框架的
Improve this question
中,我遇到了对二进制搜索函数的外部引用。

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中。也可以从SSCLI20获得CLR的源代码,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功能,更容易看到它。

在PHP中使用long int - php

我正在尝试此方法,但无法存储较大的价值$var = rand(100000000000000,999999999999999); echo $var; // prints a 9 digit value(largest possible) 如何获得期望值? 参考方案 PHP整数通常为32位。其他软件包提供了更高精度的整数:http://php.net/man…

从JAVA调用方法C#.NET - java

我有一个C#.NET项目中创建的dll,我想从Java程序中调用方法。我想知道是否存在实现此目标的机会,然后遇到了JNA和JNI。我应该使用哪一个?有什么建议么?我只需要在使用C#.NET编写的类中调用方法并处理Java程序的结果即可。 参考方案 这取决于您的应用程序,但是您可以将C#DLL放在服务中,例如WCF并以这种方式将功能公开给Java代码。使用ws…

从ASP.NET 1.1转换为ASP.Net 3.5后,单选按钮停止工作 - javascript

[我在下面以FYI的形式发布我们的问题和解决方案。如果您有Microsoft或代表机构对此问题的正式声明,我会将其标记为答案。否则,我下面的帖子将作为答案]。问题:我们采用了ASP.Net 1.1程序,并将其转换为ASP.Net 3.5。该页面最初正确显示,默认情况下选中一个单选按钮,并显示一个项目列表(“列表A”)。当我们单击另一个单选按钮时,它将正确显示…

.NET Core解决方案中同时具有API和MVC项目的约定 - c#

我有一个由以下项目构成的ASP.NET Core(.NET Core 2.2)应用程序:API:表示WebAPI(控制器继承ControllerBase)服务:包含API控制器用来访问数据库等的服务数据库:它包含常用的数据库存储库,服务层可利用这些数据库访问数据库现在,我想添加一个与API对话的UI(MVC部分位于.NET核心之前)。 .NET Core如何…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……