2010-03-14 8 views
1

서버 va 서비스 (WCF)를 호출하는 스마트 클라이언트 (WPF)가 있습니다. 내가 작업중인 화면에는 생성자가 호출 될 때로드되는 객체 목록이 있습니다. 목록의 레코드를 추가, 편집 및 삭제할 수 있습니다.스마트 클라이언트 성능 최적화

일반적으로 내가하고있는 일은 추가 또는 삭제할 때마다 서비스에서 전체 모델을 다시로드하기 때문에 데이터가 호출간에 서버에서 변경되었을 수 있다는 사실을 포함하여 여러 가지 이유가 있습니다.

이 접근법은 추가 및 편집에서 전선을 위아래로 보내는 모든 것을로드하기 때문에 성능에 큰 영향을 미쳤습니다.

내게 열려있는 다른 옵션은 필요한 정보 만 서버에 보내야하고 추가 또는 삭제가 수행 될 때까지 모든 데이터를 다시로드하지 않는 방법은 무엇입니까?

답변

1

설명하는 방식을 수행하는 최적의 방법 클라이언트/서버 I/O가 이미 병목 상태라는 것을 알고 있다고 가정 할 것입니다. 클라이언트가 채워지면 양방향으로 만 변경 사항을 전송하는 것입니다.

데이터 업데이트를 위해 저널링 모델을 채택한 경우 간단 할 수 있습니다. 프로세스가 공유 데이터를 변경하려면 저널에 추가되는 시간 표시 트랜잭션을 작성해야합니다. 데이터에 대한 갱신은 트랜잭션을 데이터에 적용하는 메소드에 의해 수행됩니다.

데이터 모델이 트랜잭션 저널을 지원하면 클라이언트와 서버를 최소한의 네트워크 트래픽과 동기화하는 간단한 방법을 사용할 수 있습니다. 클라이언트를 업데이트하기 위해 서버는 이후 생성 된 모든 저널 항목 클라이언트가 마지막으로 갱신 된 시간.

이것은 기존 설계에 개조 할 때 상당한 양의 작업이 될 수 있습니다. 이 길을 가기 전에, 수정하려는 문제가 실제로 문제인지 확인하고 싶습니다.

-1
  1. 이 기능이 잘 캡슐화되어있어 다른 구성 요소를 건드리지 않고도 재생할 수 있습니다.
  2. 소스를 버전 관리하에두고 자주 체크인하십시오.
  3. 리팩터링 전에 모든 것이 제대로 작동하는지 확인하고 각 변경을 수행하면서 계속 작동하는지 확인하기 위해 자동화 된 단위 테스트 제품군을 사용하는 것이 좋습니다.
  4. 성능 적중률이 서버 -> 클라이언트 전송 (서버의 쿼리, 처리 및 디스크 IO보다 중요)에 해당하는 경우 주어진 컬렉션 또는 개체 그래프의 해시를 고안하고 해시를 전달하는 방법을 고려할 수 있습니다 데이터베이스의 해시를 쿼리하고 계산하고 해시를 비교 한 다음 서버의 서비스 메소드에 true 또는 false을 반환합니다. false 인 경우에만 데이터를 다시로드합니다. 이것은 변화가 일어날 가능성이 희박하거나 가끔 발생하는 경우에 효과적입니다. 변화가있을 때 데이터를 얻으려면 두 번의 호출이 필요하기 때문입니다. DB의 변경 사항이 염려되는 경우 사용자가 무언가를 수정하거나 추가 할 때만 변경 사항을 얻고 싶지 않을 수 있습니다. 예를 들어 타이머를 기반으로하는 완전히 별도의 작업 일 수 있습니다. 동시성 전략은 데이터, 사용자 수, 같은 데이터를 동시에 변경하려는 사용자가 한 명 이상일 때마다 달라집니다.
+3

1, 2 및 3은 런타임 성능과 어떤 관련이 있습니까? – CesarGon

+0

당신은 이것이 질문의 제목 이상이라는 것을 알고 있습니까? 질문은 최적화에 관한 것이며, 최적화하기 전에 실사입니다.내 답변이 * 1,2 * 3 만 있으면 downvote를 이해할 수 있지만 엔지니어링 관행에 대해 포괄적 인 것은 아닙니다. 그래도 나는 당신의 질문에 답할 것입니다. 주어진 변경의 성능 효과를 측정하고 비교하려면 각 구현에서 버전을 유지해야합니다. 이것을 실용적으로하기 위해서는 작업중인 시스템을 잘 캡슐화해야합니다. 효율성을 높이려면 작동하는지, 즉 테스트인지를 알아야합니다. – Jay

관련 문제