对象池和CSLA框架

时间:2010-12-06 16:35:46

标签: c# csla objectpool

我的应用程序遵循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的数据外部化,并结合对象应该维护自己的数据和数据访问的原则。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

确保您的对象生成真正受到影响。对象生成和GC是sql server中的CHEAP,并且涉及到数据库。 IO肯定ap rofilder会告诉你它不是影响你性能的对象摧毁和破坏,而是首先拉动了100万个对象。

事实上,拉动物体的速度应该比制造物体慢1000倍。

Especialyl带有荒谬的低效代码,如

  

this.Color = dataReader.get(“Color”);

这是每辆车的哈希表lokoup。那么存储字段的索引(或知道它,它在sql运行之间不会改变)和使用索引呢?仅此一点就会带给你比任何其他方法更多的东西。特别是如果yuo还发布了一百万个单独的SQL语句 - 就像你似乎那样。

与进行性能优化时一样:运行PROFILER。在你的情况下,你是100%错误的想法,你在浪费你的时间。你会发现对象创建和gc甚至没有出现在前十大性能浪费中。