在C#中预分配大量对象

时间:2015-03-31 16:25:31

标签: c# algorithm garbage-collection allocation memory-efficient

我在C#中实现了一个使用大量自定义类型的复杂算法。

该算法的主要动作之一是在运行时动态创建新对象。

为了尽可能多地保存电话,我的目标是预先分配许多不同的电话。

我的算法将使用:

  • 成千上万的名单预先分配了游泳池。
  • 数百个结构预分配池。
  • 将在运行时创建的数百个类似树的对象可以包含大量子项。

我已阅读(here)C#GC针对极快的分配进行了优化,但我知道GC在堆运行不足时开始收集。

如果我的算法会使堆低,GC将开始收集,但由于我的池将保留,因此该操作将暂时冻结应用程序并且可以影响性能。 我是否应该放弃使用池的想法并且每次都使用新分配的对象?

1 个答案:

答案 0 :(得分:1)

.NET在分配对象方面非常快,你会发现有些东西可能是不可变的。它将收集并且如果您的代码引用了对象,它们将不会被收集并且将被推送到GEN,因此将更少检查。

代码分析工具将帮助您和一些代码示例将帮助我们。

这样可以很好地阅读

http://blogs.msdn.com/b/dotnet/archive/2012/07/20/the-net-framework-4-5-includes-new-garbage-collector-enhancements-for-client-and-server-apps.aspx