是否有TrySZIndexOf的文档?

时间:2015-01-30 14:06:38

标签: c# .net arrays

我正在研究Generic List in 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是一种搜索基本类型数组的优化方法。任何人都可以描述这种方法是如何工作的,或指向一些文档吗?

1 个答案:

答案 0 :(得分:1)

总结Magnus发布的链接:

TrySZIndexOf使用本机方法,如果您使用的是本机类型,则会将memchr用于适合单个字节的类型,或者对于大于1的类型使用其他本机实现的函数字节可以非常快速地找到您正在寻找的项目的地址。

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