【发布时间】:2021-11-17 19:34:36
【问题描述】:
我正在尝试创建一种方法来执行增量和赋值操作,如下所示:
Public Sub ArrayAdd(ByRef arr As Object(), newItem As Object)
Try
If IsNothing(arr) Then
arr = New Object() {newItem}
Exit Sub
End If
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = newItem
Catch ex As Exception
Throw New ApplicationException(ex.Message, ex)
End Try
End Sub`
使用这种方法会产生类型转换错误,所以我想使用泛型Of T(没有成功)。
【问题讨论】:
-
你没有提到你的
List<T>和newItem是什么类型,或者T是否是一个接口。您可能应该发布创建通用方法的失败尝试。此外,是否有特定原因使用 Array 而不是 List 或类似集合(因此您不需要手动处理此操作)? -
找到了解决方案,我将在这篇文章中将其写为答案。这背后的原因是因为数组在读/写/迭代操作中更快,而且我(唉)正在开发一个 winform 应用程序。我需要尽可能优化。
-
List
在后台使用数组并实现经过测试和优化的代码来缓存、调整大小和调整内容大小。你试图做的没有真正的用处。它不是唯一的现有集合类型。您还有其他性能更好的集合类型,可以根据具体用例进行选择。 WinForms 平台也与此没有直接联系。您应该发布一个与您实际尝试对数组执行的操作相关的特定问题。 -
如果您需要优化,那么大概您已经在典型工作负载下测量了
Array和List(Of T)的性能,发现Array明显更快?在没有测量的情况下假设代码中的阻塞点总是很危险的。 -
是的,使用数组开发的相同程序比使用列表快得多。无论如何,我要实现的最后一个改进是在可能的情况下从 AoS 更改为 Soa。我在 Dmitri Nesteruk 的课程中发现了列表和数组之间的这种区别,在关于复合代理的讲座中,他使用数组而不是列表,我只是想知道为什么。