我的代码必须生成数百万个对象来执行某些算法(将创建数百万个对象,同时应销毁其中的2/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?
此致
萨马