我的应用程序遵循CSLA框架中的基本方法。具体而言,对象知道如何维护其状态以及如何创建,更新,删除自身。汽车类展示了这个想法。
public class Car
{
public int Color {get;set;}
public void Drive(){.. Do something Here}
private Car(){} // Only factory method can create this object
public static Car New()
{
Car car = new Car();
car.DataFetch();
return car;
}
private void DataFetch()
{
// Fill up this object with values from DB or where ever
this.Color = repo.valueForColor();
// ...
}
}
应用程序创建并销毁超过1百万个对象,并且由于正在进行的垃圾收集量,对象创建的剪切数会影响性能。此外,很多这些对象都是完全暂时的,用于简单地将数据传递到存储库。
我已经阅读了flyweight pattern这似乎可能符合我的需求。我还阅读了Object Pooling和相关的code。
我遇到的问题是使用池创建一百万个Car对象或者将flyweight的数据外部化,并结合对象应该维护自己的数据和数据访问的原则。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
确保您的对象生成真正受到影响。对象生成和GC是sql server中的CHEAP,并且涉及到数据库。 IO肯定ap rofilder会告诉你它不是影响你性能的对象摧毁和破坏,而是首先拉动了100万个对象。
事实上,拉动物体的速度应该比制造物体慢1000倍。
Especialyl带有荒谬的低效代码,如
this.Color = dataReader.get(“Color”);
这是每辆车的哈希表lokoup。那么存储字段的索引(或知道它,它在sql运行之间不会改变)和使用索引呢?仅此一点就会带给你比任何其他方法更多的东西。特别是如果yuo还发布了一百万个单独的SQL语句 - 就像你似乎那样。
与进行性能优化时一样:运行PROFILER。在你的情况下,你是100%错误的想法,你在浪费你的时间。你会发现对象创建和gc甚至没有出现在前十大性能浪费中。