SqlDataReader 类提供了一个名为 GetValues 的方法。我对这个方法感到好奇的是,它接受一个object[]
作为输入并返回int
复制到数组中的值的数量。
知道为什么该方法是这样设计的,而不是返回一个新数组吗?
只是一个猜测,但通过传入一个数组,您可以一遍又一遍地重用同一个数组。创建数组需要时间。不是很多时间,但是如果您要迭代数百万个结果,则可以通过重用相同的数组来获得可衡量的性能提升。每次创建一个新数组也会导致 GC 做更多必要的工作。
根据文档:
您可以传递一个 Object 数组,该数组包含的列数少于结果行中包含的列数。仅将 Object 数组保存的数据量复制到数组中。您还可以传递一个长度大于结果行中包含的列数的对象数组。
这允许调用者完全控制内存分配,也可以轻松控制请求的列数。