关于大量类创建后的效率问题。
在C#应用中需要创建并操作大数据量的类,比如需要创建几万个类对象。
此时有两种方式:
方式1)
类中只保存数据,即拿类当数据结构使用,只有属性定义。没有任何操作方法,将操作类的方法置于
操作对象。由操作对象操作数据对象。操作对象是一个。
方式2)
类中既保存数据同时又定义方法。操作时驱动类自身处理逻辑。
问题:
使用方式2)在编程时较简单,也符合面对对象设计。但相比方式1)是否会占用更大内存,从而产生效率问题?
自己写的简单测试程序表明,似乎方式2)相比方式1)并没有占用更大内存。这是为什么?
------解决方案--------------------使用设计模式中的享元模式。
------解决方案--------------------
方法并不是数据,只是一个处理数据的过程,对于类来说,方法并不属于某一实例,而是有一个方法表。调用的时候只是去方法表里把方法拿出来,所以无论你生成多少个实例,方法表里的内容都是一样的。
------解决方案--------------------
方法保留的只是指针,所有类实例的方法都执行同一个地方,不会像那些常规类型一样,被复制
------解决方案--------------------
方法是共享的,不增加内存
从汇编层面上讲,数据和行为是分段保存
100个对象,数据有100份,但行为只有1份
只是将对象的指针(this)传入方法