繁体   English   中英

是否有有关TrySZIndexOf的文档?

[英]Is there any documentation for TrySZIndexOf?

我正在查看Reference Source中通用列表的Remove方法的实现。 我想找出该方法是否有某种聪明的方法来查找要删除的项目,这比仅遍历所有项目要快(答案似乎是“否”)。 我看到List.Remove调用Array.IndexOf来查找项目,并且Array.IndexOf首先尝试使用称为TrySZIndexOf的本机方法来查找项目。

// Try calling a quick native method to handle primitive types.
int retVal;
bool r = TrySZIndexOf(array, startIndex, count, value, out retVal);
if (r)
    return retVal;

TrySZIndexOf的声明是

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

如果TrySZIndexOf返回False,则Array.IndexOf遍历数组中的所有项目。

这些注释表明TrySZIndexOf是一种搜索原始类型数组的优化方法。 谁能描述这种方法的工作原理,或者指向一些文档?

总结一下Magnus发布的链接:

TrySZIndexOf使用一个本机方法,如果您使用的是本机类型,则将memchr用于适合单个字节的类型,或者将另一个本机实现的函数用于大于1字节的类型,以非常快速地找出您所要存储的项目的地址重新寻找。

如果类型不是本机类型(或者该函数不支持,则该方法返回false)。 在这种情况下,只是蛮力尝试迭代列表/数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM