2010-12-06 2 views
0

CSLA 프레임 워크의 기본 methodoligy를 따르는 응용 프로그램이 있습니다. 구체적으로 객체는 자신의 상태를 유지하는 방법과 생성, 업데이트, 삭제 방법을 알고 있습니다. 차 클래스는이 아이디어를 보여줍니다.개체 풀링 및 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을 읽었습니다.

나는 풀을 사용하거나 플라이급 데이터를 의 원칙과 결합하여 백만 카 객체를 생성하는 데 문제가 있습니다. 객체는 자체 데이터 및 데이터 액세스을 유지 관리해야합니다.

이 작업을 수행하는 방법에 대한 아이디어가 있으십니까?

답변

1

개체 생성이 실제로 영향을 미치는지 확인하십시오. 개체 생성 및 GC는 SQL Server에서 CHEAP이며 데이터베이스가 관련되어 있습니다. IO는 여러분의 성능에 영향을 미치는 오브젝트 크래이어와 파기가 아니라는 것을 보여줄 것입니다. 그러나 처음에는 1 백만 개의 오브젝트를 가져옵니다.

실제로 대상을 당기는 것은 대상을 만드는 것보다 1000 배 느려야하며 파괴해야합니다.

Especialyl의 WIH 말도 비효율적 인 코드

같은

this.Color = dataReader.get ("색상");

이것은 모든 자동차에 대한 해시 테이블입니다. 필드의 인덱스를 저장하는 방법 (또는 SQL 실행간에 변경되지 않음)과 인덱스를 사용하는 방법은 무엇입니까? 그것만으로 다른 접근법보다 더 많은 것을 가져올 것입니다. 특히 yuo가 100 만 개의 별도 SQL 문을 발행하는 경우 - 당신이하는 것처럼 보입니다.

성능 최적화를 수행 할 때 항상 그렇듯이 : 프로파일 러를 실행하십시오. 당신의 경우에 당신은 당신이 당신의 시간을 낭비하고있는 잘못된 생각에 100 %입니다. 당신은 객체 생성과 gc가 상위 10 개의 성능 저하에 나타나지 않는다는 것을 알게 될 것입니다.

+0

이것은 샘플 코드 일뿐입니다. 나는 실제로 데이터를 가져 오지 않는다. 프로파일 링 한 정확한 테스트는 i Brig

관련 문제