解决方案从.net 4升级到4.6.1后性能下降

时间:2016-08-30 18:43:17

标签: c# .net performance garbage-collection .net-4.6.1

我已将我的解决方案从.net 4.0升级到.net 4.6.1并观察到一些奇怪的行为。

我有一个程序,在这个程序中我有一个序列(称之为 sequence1 ),它读取双精度数组的二进制文件并将数据保存在RAM中。

在升级之前每当我运行 sequence1 (程序是单线程)时,机器使用了25%的CPU(在4核机器中)。 自升级以来这种行为发生了变化,如果我用 sequence1 开始我的程序我得到了正常的行为(序列运行在25%)但是如果在 sequence1 之前我运行了一些算术计算和分配一些类让我们称之为 sequence0 ,然后当我到达 sequence1 时,它使用了70-90%的CPU。

我认为这可能与垃圾收集机制有关。我已经尝试将所有类设置为null并在 sequence0 之后调用GC.Collect(在调用 sequence1 之前)但我仍然得到 sequence1 < / strong>运行在70-90%;也许这与GC算法相关,该算法在执行 sequence0 时更新了它的脱粒?

1 个答案:

答案 0 :(得分:1)

升级到4.6.1可能会导致GC.Collect()调用花费更长时间, 尝试检查是否有任何显式调用垃圾回收。 这也解释了为什么在完成分配内存的作业后你会获得更多的CPU使用率,如果有更多分配的对象则垃圾收集需要更长的时间