문제

데이터 세트를 세션에 유지하거나 각 Postback에서 데이터 세트를 채우는 것이 바람직한 점은 무엇입니까?

도움이 되었습니까?

해결책

그것은 많은 요인에 달려 있습니다. 세션이 덜 확장 가능하기 때문에 세션이 Inproc 또는 State Server에있는 경우 세션 메모리에 너무 많은 항목을 유지하지 않는 것이 가장 좋습니다.

세션이 데이터베이스에 상주하는 경우 쿼리를 실행하는 데 비용이 많이 드는 경우가 아니라면 데이터 세트 만 리퍼리하고 데이터 세트를 다시 채우는 것이 좋습니다.

다른 팁

세션을 사용하지 마십시오 !!! 사용자가 다른 요청으로 두 번째 탭을 엽니다면 세션이 재사용되고 결과는 자신이 기대하는 결과가 아닙니다. ViewState와 세션의 조합을 사용할 수 있지만 캐싱에 의지하기 전에 어떤 종류의 캐싱없이 처리 할 수있는 양을 여전히 측정합니다.

그것은 당신이 얼마나 많이 할 것인지, 세션 데이터가 서버에 저장되는 위치에 달려 있습니다.

세션에 데이터 세트를 유지하면 반드시 영향을 미칩니다 메모리 사용. 모든 세션 변수는 SQL Server 상태를 사용하는 경우 메모리 또는 SQL Server에 저장됩니다. 상태 서버 모드를 사용하여로드를 다른 시스템에 오프로드 할 수도 있습니다.

직렬화/사막화 측면. 미친 듯이 큰 데이터 세트를 사용하면 서버 SEIDE 성능에 큰 영향을 줄 수 있습니다.

반면에 페이지의 매우 큰 뷰 스테이트는 실제 성능 킬러가 될 수 있습니다.. 따라서 데이터 세트를 세션이나 캐시에 보관하고 해당 세션 데이터를 저장하는 "OutProc"방법을 찾습니다.

가능한 한 적은 데이터베이스 작업을 원하기 때문에 데이터를 세션에 보관할 것이지만 가장 좋은 방법이 무엇인지 잘 모르겠습니다. 동시성을 어떻게 처리합니까? 또한 두 사용자가 동시에 페이지를 사용하면 데이터가 공유되므로 각각 각각의 세션에 고유 한 데이터 세트가 있는지 확인하려면 어떻게해야합니까?

나는 그것이 너무 크지 않거나 DB가 멀리 느리지 않으면 보통 세션에 보관합니다. 데이터가 크면 일반적으로 다시로드하는 것이 좋습니다.

때로는 캐시를 사용하고 처음으로 DB에서로드하여 캐시에 넣습니다. 포스트 백 동안 나는 차치를 확인하고 비어 있으면 다시로드합니다. 따라서 서버는 캐시 자체를 관리합니다.

세션의 문제점은 PROC에 있다면 사라질 수있는 것이 좋지 않을 수 있다는 것입니다. 스테이트 서버라면 직렬화해야하며 SQL SATE라면 어쨌든 왕복을하고 있습니다!

결과 세트가 큰 경우, 전체 결과의 작은 하위 집합 만 반환 할 수 있도록 사용자 정의 페이징을 수행하십시오.

그런 다음 한 명 이상의 사용자 가이 결과 세트가 캐시에 각 페이지를 캐시에 놓을 것이라고 생각하면 데이터가 변경 될 때 또는 액세스 할 수없는 시간 후 캐시가 갱신되도록 각 페이지를 캐시에 넣습니다.

많은 라운드 트립을하고 싶지 않고 메모리를 가지고 있다고 생각한다면 캐시의 전체 데이터 세트를 뚫지 만 웹 서버를 녹이지 않도록주의하십시오.

캐시를 사용한다는 것은 사용자가 고유 한 데이터 세트가 필요하지 않음을 의미합니다.

삽입/ 편집 페이지를로드 할 때 동시성이 진행되는 한 새로운 데이터로 채우고 추가/ 업데이트 후 캐시를 갱신해야합니다.

나는 분리에 대한 큰 신자이며, 전체 데이터 세트를 사용자 인터페이스에 버려야 할 필요성을 거의 보지 않습니다.

실제로 사용해야하는 UI에만 객체를 전달해야하므로 대형 다이어그램이나 데이터 간의 관계를 표시 해야하는 일종의 데이터 구조가 표시되지 않는 한 비용이 들지 않습니다.

적용 가능한 경우 더 작은 데이터 하위 세트가 훨씬 효율적입니다. 응용 프로그램이 실제로 UI의 데이터 세트 내의 모든 기능을 사용하고 있습니까? 그렇지 않다면, 진행하는 가장 좋은 방법은 표시하는 데이터 만 전달하는 것입니다.

데이터를 통해 데이터를 컨트롤 및 정렬/페이징 등에 바인딩하는 경우 데이터 세트가 훨씬 작은 코드로 데이터 세트를 지원할 수있는 많은 인터페이스를 구현할 수 있습니다.

그 메모에서, 나는 캐시에서 대부분 정적 인 데이터를 유지합니다 (예 : 자주 업데이트되지 않음). 따라서 실제로 결정을 내리기 전에 데이터가 얼마나 자주 업데이트되는지 살펴 봐야합니다.

마지막으로, 나는 이것을 다시 말할 것입니다. 나는 UI의 데이터 세트를 매우, 매우 드물게 사용해야 할 필요성을 알 수 있습니다. 그것은 매우 무거운 데이터 객체이며 데이터 요구 사항을 보는 것의 비용 이점과 구현의 용이성은 멀리있을 수 있습니다. 데이터 세트를 캐시해야 할 필요성을 능가합니다.

IMHO, 데이터 세트는 성능 또는 메모리 활용에 대해 걱정하는 경우 사용하기가 다소 나쁩니다.

귀하의 답변은 데이터 사용을 암시하지 않습니다. 참조 데이터입니까? 사용자가 적극적으로 업데이트하고 있습니까? 한 번에 하나 이상의 사용자가 업데이트 액세스를 의미합니까?

귀하가 제공 한 것보다 더 나은 정보가 없으면, 많은 양의 데이터를 세션에 유지하는 것이 신청서를 보장하는 방법이라는 인정 된 지혜를 가십시오. ~ 아니다 소수의 사람들에게 서비스를 제공하기 위해서는 엄청난 자원이 필요합니다.

모든 데이터를 메모리에서로드하지 않고 대규모 데이터 세트를 관리하는 더 좋은 방법이 있습니다.

애플리케이션 데이터 요구가 진정으로 괴로워하는 경우 웹 서비스 백엔드가있는 무거운 클라이언트를 고려하지 않습니다. 웹 페이지를 만드는 것보다 더 적합 할 수 있습니다.

다른 답변이 언급 한 바와 같이, 대답은 "의존한다". 그러나 사용자간에 공유되는 데이터에 대해 이야기하고 있다고 가정합니다. 이 경우 당신은해야합니다 ~ 아니다 사용자 세션에 데이터 세트를 저장하지만 Postback에서 다시 채우십시오.

또한 응용 프로그램의 데이터 액세스 계층 근처에 캐시를 채우면 대화식 성능을 높이고 데이터베이스의로드를 줄입니다. 캐시 설계는 다시 데이터 유형 (읽기 전용 대 읽기/쓰기 대 읽기)에 따라 다릅니다.

이 접근법은 사용자 세션 (UI 계층 개념)을 데이터 관리에서 분리하고 캐시 된 데이터의 공유 사용을 지원하는 추가 이점을 제공합니다 (데이터가 공통적 인 경우).

둘 다-아무것도 "유지"하지 마십시오! 사용자 가보고 효율적인 페이징 방식을 작성하고 구축하여 행을 뒤로 또는 포워드를 볼 수있는 것만 표시합니다.

RP

세션을 계속하십시오. 예를 들어 세션 메모리가 지워지는 경우 필요한 경우 다시 채울 수있는 옵션이 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top