我在C#中要求一个项目,但我认为这个问题也适用于其他语言。我听说大量的对象创建和破坏会导致巨大的开销和性能问题。我想知道我是否可以通过简单地使用结构而不是对象来解决这个问题。
答案 0 :(得分:5)
"使结构而不是对象" - 正如你所说的那样(我猜你的意思是 object 是 class )因为结构的本质而很可能在创建struct实例时没什么帮助,将要求你通过值而不是通过引用来引用它 - 这个可能(并不总是)使你的记忆使用更重
话虽这么说,你可能需要的是 Flyweight设计模式
来自https://sourcemaking.com/design_patterns/flyweight:
Flyweight设计模式
意图
使用共享有效地支持大量细粒度对象。
使用轻量级小工具替换重量级小部件的Motif GUI策略。
问题
将对象设计到最低级别的系统"粒度"提供最佳的灵活性,但在性能和内存使用方面可能会令人无法接受。
讨论
Flyweight模式描述了如何共享对象以允许在细粒度下使用它们而不会产生过高的成本。每个" flyweight"对象分为两部分:状态依赖(外在)部分和状态无关(内在)部分。内部状态在Flyweight对象中存储(共享)。外部状态由客户端对象存储或计算,并在调用其操作时传递给Flyweight。
答案 1 :(得分:2)
以下是您现在必须了解的关于C#中struct
和class
的一些事实:
struct
创建速度比class
快,因为它是在堆栈上分配而不是在堆上struct
是值类型,class
是引用类型。因此使用引用类型(将其作为参数传递,复制它,...)比使用值类型快得多。见Difference between struct and class struct
字段的访问速度快于class
字段,因为它们已在堆栈中分配以下是关于GC如何在.Net中工作的一些事实:
了解所有这些并且简短,如果您不希望您的程序受到GC工作的影响,您必须使用在程序中存活时间较长的对象的引用类型,并使用对象的值类型这将用于非常短的时间和非常局部的范围。