2009-07-18 4 views
0


나는 게으른 부하 패턴이 여기

나는 현재 웹 사이트 프로그래밍 및 저자의 책을 읽고 있어요 유용 그는 게으른 부하 패턴을 사용하는 DLL 객체를 코딩 할 것이라고 언급 여부를 모르겠어요. 개념적으로 게으른로드 패턴을 다소 이해하고 있다고 생각하지만 저자가 구현 한 방식으로 그 유용성을 이해할 수 있을지 모르겠다.

BTW - 일반적으로 게으른로드 패턴의 유용성을 요구하지는 않지만 이 방법에 유용한인지 특정 도서를 구현한다


1) DLL 오브젝트가 생성 될 때 여하튼 안, DB 조회는 다양한 열로부터 데이터를 검색 DAL), 경유 (행하는 DLL 객체의 속성을 채 웁니다. 필드 중 하나 ("L")에는 상당히 많은 양의 텍스트가 포함될 수 있기 때문에 작성자는 해당 속성을 처음 읽을 때만 해당 필드를 검색하기로 결정했습니다.

우리의 상황에서

A)는, 정확히 우리가 게으른 부하 패턴을 적용하여 무엇을 얻을 않았다
? 메모리 사용량이 적습니까?


B) 그러나 다른 한편으로는, 방법의 저자는 더 많은 작업 때문에 L은 다른 분야와는 별도로 검색하는 경우 때문에, 완료하는 데 시간이 더 오래 할 수있는 CPU에 대한 게으른 부하 패턴 원인을 구현하지 않습니다 , "L"을 검색하기 위해 Sql Server에 대한 추가 호출을 요청하는 응용 프로그램이 필요합니다. 지연 패턴이 없어도 모든 필드를 한 번에 가져올 수 있기 때문에 SQL Server에 대한 호출은 하나만 필요합니다. ?!

은 BTW - 내가 게으른 부하 패턴이 무거운 컴퓨팅을 필요로 데이터의 특정 부분을 검색하는 상황에서 매우 도움이 될 수 실현,하지만 위의 예


고맙습니다

의 경우이 아니다

답변

1

올바른 열에 적용하면 매우 유용하다고 생각합니다. 예를 들어 데이타베이스에 Customers이라는 테이블이 있고이 테이블에 CustomerPublicProfile이라는 열이 있다고 가정 해 봅시다.이 열은 상당히 클 수 있습니다.

열이 아닌 고객 목록을 표시하는 화면 (Customers.aspx이라고 부름)이있는 경우 해당 열을 채우지 않으려 고 시도해야합니다.

예를 들어 Customers.aspx 페이지에서 한 번에 50 명의 고객을 표시하는 경우 각 고객에 대해 CustomerPublicProfilecolumn을 가져올 필요가 없습니다. 사용자가 특정 고객에 대해 자세히 알아보기로 결정한 경우 CustomerPublicProfile 열을 가져올 수 있습니다.

는 B에 대해, 그래이 N 사용자가 드릴 다운하기로 결정 고객의 숫자가 N 추가 호출을하게한다. 그러나 장점은 처음부터 열을 건너 뛰는 데 불필요한 많은 오버 헤드를 덜어 줬다는 것입니다. 특히 M-N 값이 CustomerPublicProfile 열이되는 것을 피했습니다. 여기서 MCustomers.aspx 페이지에서 검색 한 고객 수입니다. 시나리오에 MN에 가까운 값을 갖는 경우

다음은 가치가 없다. 그러나 상황에서 나는 M가 보통 N보다 훨씬 크기 때문에 설명하는 것이 좋습니다.

사예드 이브라힘 하시

+0

내 특정 상황에서 게으른로드 패턴 만 메모리를 절약 할 수 있습니까? – SourceC

+1

아니요, DB에 대한 스트레스와 클라이언트에서 DB까지의 대역폭도 절약됩니다. 그리고 앱 속도가 빨라집니다. –

+0

계속해서 죄송합니다. 그런데 왜 내 애플리케이션의 속도가 빨라지 는가? 자네가 말했듯이, 게으른로드는 N 개의 DB에 대한 추가 호출을 야기합니다. 아마 당신은 CustomerPublicProfile 열의 MN 값 ('-'은 마이너스 값이라고 가정)을 피하는 방법으로 속도를 높이 겠지만, 느린로드 패턴을 사용하지 않고 추가 MN 값을 가져 오지 않으면 더 많은 메모리가 필요할 것입니다. M 속성에 열 값을 할당하는 데 약간의 시간이 추가됩니다. 하지만 DB에 대한 N 개의 추가 호출을 처리하는 것보다 처리가 덜 걸립니까? – SourceC

2

대부분의 경우 L 필드없이 DLL 개체를 사용할 수 있다면 의미가 있습니다. 이 경우 프로그램은 L이로드 될 때까지 기다리는 동안 사용 가능한 데이터로 작업 할 수 있습니다. L이 항상 필요하다면 패턴은 단지 복잡성을 증가시킵니다. L을 로딩하면 다른 어떤 것보다 더 많은 시간이 걸리면 크게 느려질 것이라고 생각하지 않습니다. 그러나 이것은 단지 추측 일뿐입니다. 게으른 로딩과 함께 쓰지 않고 더 나은 것을보아야한다.

1

은 내가 데이터베이스에 큰 바이너리 객체를 포함 한 최근 곳이 같은 상황이 있었다. 확실히 개체가 컬렉션의 일부 였을 때 초기화 될 때마다 DLL 개체에로드하는 것을 원하지 않았습니다. 따라서 필드를 게으른로드하는 것이 의미가있는 경우가 있습니다. 그러나 나는 당신이 따를 수있는 일반적인 규칙이 없다고 생각합니다 - 당신은 당신의 데이터와 그것이 어떻게 액세스 될 것인지를 안다. 데이터베이스를 한 번만 방문하고 조금 더 많은 메모리를 사용하는 것이 더 효율적이라고 생각한다면 그렇게해야합니다.