【发布时间】:2018-12-19 13:13:11
【问题描述】:
任何人都可以建议在这种情况下选择什么: 我有 100-500 个(它们是动态的,意味着在每个请求中它们的数量总是不同的)元素,其中包含元素名称、类型、id。目前我使用多维数组
public static Object[,] Item_data = new Object[500, 3];
然后我将数据设置为数组:
int found_items = 0;
foreach (Object m in queryCollection)
{
Item_data[found_items, 0] = m[0];
Item_data[found_items, 1] = m[1];
Item_data[found_items, 2] = m[0];
found_plans++;
}
我还有 8 个其他相同的结构数组填充不同的数据,它花费大约 0.8-1.5 秒,问题是我需要按 id、名称和类型对这些数组 ASC、DESC 进行排序,如果我手动使用另一个循环对数据进行排序需要时间,所以我注意到 List(T) 它具有排序功能,但根据这些主题,它的速度要慢得多:
Performance of Arrays vs. Lists
https://jacksondunstan.com/articles/3058
https://softwareengineering.stackexchange.com/questions/221892/should-i-use-a-list-or-an-array
在这种情况下是否值得使用 List(T)?或者任何人都可以推荐其他东西吗?
【问题讨论】:
-
你对它进行了基准测试吗?相关阅读:ericlippert.com/2012/12/17/performance-rant
-
解决方案是否适合您在很大程度上取决于您的数据和周围环境。因此,在您的 特殊 情况下,依赖处理 general 性能方面的其他主题并不一定是有意义的。至少第三个链接向您表明,这实际上取决于您的用例使用哪种数据结构。除此之外,考虑这一点通常并不重要,因为实际性能瓶颈通常在其他地方。
-
对于初学者来说,使用
Object处理可能具有原始类型(如int)的数据会导致访问效率非常低。多维数组造成访问不便。首先从语言中显而易见的内容开始(即具有属性的类,您使用内置的.OrderBy进行排序)。只有当这还不够快时,您才应该开始考虑花哨的东西,例如,使用在线排序算法或 B 树对数据进行排序,而不是之后。另外,永远不要忘记数据库是一回事,很多聪明人都对它们进行了优化。 -
@JeroenMostert 我使用对象数组,因为它的存储类型如 RegistryKind、Windows 安全等,所以对象是最好的解决方案。而且我无法访问排序数据库,因为它非常有限,所以我对软件而不是数据库部分进行排序。
-
你的超快数组使用什么排序代码?
标签: c# arrays performance