ToList()所带来的性能影响

    前几天优化师弟写的代码,有一个地方给我留下很深刻的印象,就是我发现他总是将PLINQ的结果ToList<>(),然后再返回给主程序,对于这一点我十分不解,于是去问他是什么原因,得到的答案很幽默:因为习惯。
    有时候对于方法的不甚了解加上“习惯”,往往是程序性能和稳定性终结者,就拿这个Case来说吧,原始代码如下:

 

    经过以上PLINQ后,泛型列表中大概还剩下60万至100万条数据,然后我们这位师弟做了两个很“施瓦辛格”的动作:ToList<>()和Count(),测试程序运行在一台4*2G HZ,12GB内存的服务器上,竟然跑了2天多!我觉得正式这两个方法导致了程序性能的降低,为了  确定我的判断,我分别在以上代码、ToList<>()和Count()周围加上了StopWatch计时器,然后将结果以文本的形式输出:
    ● 100万数据PLINQ:
==========3/26/2011 01:34:31 PM ===========
**(GetDeletedRecords)Start PLINQ(LINQ FITTER)
==========3/26/2011 01:38:38 PM ===========
**(GetDeletedRecords)Finish PLINQ (LINQ FITTER)
   ●  80万数据ToList <>():
==========3/26/2011 03:22:10 PM ===========
**(GetDeletedRecords)Start Get List
●  80万数据Count():
==========3/28/2011 02:12:09 PM ===========
**(GetDeletedRecords)Start Get Count
==========3/28/2011 08:50:55 PM ===========
** (GetDeletedRecords)Finish Get Count
    日志格式是这样:任务开始时输出当前时间和“Start”,任务结束时输出“Finish”,当从日志中可以看出,PLINQ的效率还是很高的,只运行了几分钟;ToList<>()方法在运行了1天多后人为终止,所以只有Start没有Finish;Count()方法也运行了6小时多。
    所以最终优化方案很简单,去掉了ToList和Count,程序从几天的运行时间一下缩短到几个小时。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将 Java 的 Double List 转换为数组,可以使用 List 类的 toArray 方法,代码如下: ``` List<Double> doubleList = new ArrayList<>(); doubleList.add(1.0); doubleList.add(2.0); Double[] doubleArray = doubleList.toArray(new Double[0]); ``` toArray 方法的参数是一个空的数组,它的类型必须与 List 存储的元素类型相同。这样就可以将 Double List 转换为 Double 数组了。 ### 回答2: 将一个Java的double类型的列表转换为数组可以使用以下步骤。 1. 首先,确定列表的大小,以便创建相应大小的数组。可以使用列表的size()方法获取列表的大小。 2. 创建一个新的double类型的数组,其大小与列表的大小相同。可以使用列表的toArray()方法来实现这一点。代码如下: List<Double> doubleList = new ArrayList<>(); // 创建一个double类型的列表 // 添加元素到列表 double[] doubleArray = new double[doubleList.size()]; // 创建一个大小与列表相同的数组 for (int i = 0; i < doubleList.size(); i++) { doubleArray[i] = doubleList.get(i); // 从列表中获取元素,并放入数组中 } 3. 现在,doubleArray数组中存储了列表中的所有元素,可以根据需要对其进行进一步操作或使用。 请注意,列表和数组之间的转换可能会带来性能上的开销。因此,在进行多次转换或大量数据处理时,可能需要考虑使用其他数据结构或算法来提高效率。 ### 回答3: 将Java的双精度列表(double list)转换为数组(array),可以使用以下步骤: 1. 首先,创建一个双精度列表(List<Double>)并向其添加需要转换的元素。例如: List<Double> doubleList = new ArrayList<>(); doubleList.add(1.5); doubleList.add(2.5); doubleList.add(3.5); 2. 接下来,创建一个与双精度列表相同长度的双精度数组(double[])。可以使用列表的size()方法获取列表的长度,并将其传递给数组的构造函数。例如: double[] doubleArray = new double[doubleList.size()]; 3. 然后,使用循环遍历双精度列表,并将每个元素赋值给数组相应的位置。可以使用列表的get()方法获取列表中指定索引位置的元素。例如: for (int i = 0; i < doubleList.size(); i++) { doubleArray[i] = doubleList.get(i); } 4. 最后,双精度列表成功转换为双精度数组。可以通过打印数组的元素来验证转换的结果。例如: for (double element : doubleArray) { System.out.println(element); } 以上就是将Java的双精度列表转换为数组的步骤。通过使用循环和列表的get()方法,可以逐个将列表的元素赋值给数组的对应位置。这样就可以方便地在不同类型的数据结构之间进行转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值