.net 为什么GetValues将对象数组作为输入而不是返回新数组

.net 为什么GetValues将对象数组作为输入而不是返回新数组,.net,ado.net,sqlclient,.net,Ado.net,Sqlclient,SqlDataReader类提供了一个名为GetValues的方法。我对该方法感到好奇的是,它将对象[]作为输入,并返回复制到数组中的值的int 你知道为什么该方法是这样设计的,而不是返回一个新数组吗?: 您可以传递一个对象数组,该数组包含的列数少于结果行中包含的列数。只有对象数组所持有的数据量才会复制到数组中。还可以传递长度大于结果行中包含的列数的对象数组 这允许调用者完全控制内存分配,也可以轻松控制请求的列数。: 您可以传递一个对象数组,该数组包含的列数少于结果行中包含的列数。只有对象数组所

SqlDataReader类提供了一个名为GetValues的方法。我对该方法感到好奇的是,它将
对象[]
作为输入,并返回复制到数组中的值的
int

你知道为什么该方法是这样设计的,而不是返回一个新数组吗?

您可以传递一个对象数组,该数组包含的列数少于结果行中包含的列数。只有对象数组所持有的数据量才会复制到数组中。还可以传递长度大于结果行中包含的列数的对象数组

这允许调用者完全控制内存分配,也可以轻松控制请求的列数。

:

您可以传递一个对象数组,该数组包含的列数少于结果行中包含的列数。只有对象数组所持有的数据量才会复制到数组中。还可以传递长度大于结果行中包含的列数的对象数组


这允许调用者完全控制内存分配,也可以轻松控制请求的列数。

只是猜测,但通过传入数组,可以反复使用同一数组。创建数组需要时间。不需要很多时间,但是如果您对数百万个结果进行迭代,那么通过重用相同的数组可以获得可测量的性能增益。每次创建一个新数组也会使GC做更多必要的工作。

只是猜测,但是通过传入一个数组,您可以反复使用同一个数组。创建数组需要时间。不需要很多时间,但是如果您对数百万个结果进行迭代,那么通过重用相同的数组可以获得可测量的性能增益。每次创建一个新数组也会导致GC做更多必要的工作。

这很公平,但是为什么不传入一个整数作为限制值,并返回该长度的对象[]。object[]myValues=sqlDataReader.GetValues(3)@拉尔夫:关键是调用方控制内存分配。如果函数返回一个数组,那么它就是控制内存使用的被调用方。一个具体的例子是对每一行重复使用相同的数组,而不是为每一行获取一个新数组。@John:我想我希望GetValues()的行为有点像Directory.GetFiles(pattern);返回一个字符串数组。现在,在这种情况下,他们别无选择,因为调用者无法知道该方法将返回多少个文件,这在技术上对sqldatareader.fair来说是不够的,但是为什么不传入一个整数作为限制值并返回该长度的对象[]。object[]myValues=sqlDataReader.GetValues(3)@拉尔夫:关键是调用方控制内存分配。如果函数返回一个数组,那么它就是控制内存使用的被调用方。一个具体的例子是对每一行重复使用相同的数组,而不是为每一行获取一个新数组。@John:我想我希望GetValues()的行为有点像Directory.GetFiles(pattern);返回一个字符串数组。现在在本例中,他们别无选择,因为调用者无法知道该方法将返回多少文件,这在技术上与sqldatareader不同。