繁体   English   中英

Array.sort(或任何集合的排序方法)是否取决于C#中单个项目的大小?

[英]does Array.sort (or any collections sort method) depends on size of an individual items in C#?

众所周知,数组适用于sort方法。 速度受阵列中存储的项目数影响。 但是,速度会受单个项目的大小影响吗? 我在网上搜索了此信息,但没有找到令人信服的答案。 有人获得了可以在此处显示的有用链接或说明吗?

例如,我们可以有一个数组,其中存储了100个字符串项目,这些字符串项目的长度均为20个字符串字符。 100个都是30个字符串字符的字符串项目的排序速度是否会有所不同?

谢谢

只要是引用类型,不,大小无关紧要。 无论引用指向的对象有多大,引用的大小总是相同的,因此交换两个引用是恒定的时间,无论它们指向什么。

编辑:现在,您已经对问题进行了细化,显然弄清楚排序顺序将花费更多的时间,而比较两个对象则更加复杂。 如果您有100个字符串,每个字符串包含100个字符,且前两个字符不同,则对它们进行排序的速度将比具有100个字符的100个字符串(都包含98个'a',并且仅在后两个字符中有所不同)快。

一般来说,在对性能感到疑惑之前,请确保您确实有问题。 比较100串字符串对于当今的硬件来说是花生。

否。对象的大小在幕后,sort方法将指针移动到集合中,并且指针的大小始终相同,无论它们指向的结构如何。 除了集合大小之外,排序方法时间还受比较列表中两个对象所花费的时间量的影响。

100个都是30个字符串字符的字符串项目的排序速度是否会有所不同?

可能是的。 可能不会。 这取决于。 如果您有一串在字符30处不同的字符串,则排序所花的时间将比一串在20个字符处不同的字符串要花费更长的时间-仅仅是因为每个字符串比较都需要做更多的工作。 另一方面,如果您有一堆字符串的第一个字符不同,那么不管有多少个尾随字符,比较都会很快。

另请注意,您使用的数据越多,CPU缓存的效率就越低,这可能会产生很大的不同。

暂无
暂无

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

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