数百万对象创建的性能建议

时间:2011-04-06 11:24:57

标签: c# performance .net-3.5

我的代码必须生成数百万个对象来执行某些算法(将创建数百万个对象,同时应销毁其中的2/3)。 我知道对象创建会导致性能问题。

有人可以推荐如何管理如此大量的对象,垃圾收集等等吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

在上面详细阐述我的“让他们成为一种价值类型”评论。

如果你有一个struct Foo,那么准备算法,例如var storage = new Foo[1000000]只会分配一大块内存(我假设所需的连续内存量可用)。

然后,您可以手动管理该块内的内存,以避免执行更多内存分配:

  • 计算实际使用的阵列中有多少个插槽
  • 要“创建”新的Foo,请将其放在第一个未使用的广告位并递增计数器
  • 要“删除”Foo,请将其与上次使用的插槽中的一个交换,然后递减计数器

当然,使用值类型与引用类型协同工作并不像将class更改为struct那么简单。但是,如果可行,它将允许您为一次性启动成本支持所有这些开销。

答案 1 :(得分:2)

如果你的算法有可能,那么尝试重用对象 - 如果2/3被立即销毁,那么你可以尝试再次使用它们。

答案 2 :(得分:0)

您可以在已创建对象的类型上实现IDisposable接口。然后,您可以实现using关键字,并在using范围内编写涉及该对象的任何逻辑。以下链接将为您提供我想说的内容。希望他们有所帮助。

http://www.codeguru.com/csharp/csharp/cs_syntax/interfaces/article.php/c8679

Am I implementing IDisposable correctly?

此致

萨马