2010-12-01 4 views
1

우리는 ASP.Net 웹 서비스를 사용하고 있습니다.ASP.Net 웹 서비스 응답 시간이 느림

아키텍처는 닷넷 3.5 데스크톱 기반 응용 프로그램을 개발

- 클라이언트 응용 프로그램 (클라이언트 시스템) ASP.Net 기반 웹 서비스 닷넷 3.5 - 비즈니스 로직 계층 (서버 IIS) SQL 2005 데이터베이스 - 데이터베이스 레이어 (IIS와 동일하거나 다른 서버)

응용 프로그램이 거의 개발되었으며 첫 번째 구현을 위해 진행 중입니다. 1 일 우리는 쇼 스토퍼 문제에 직면했습니다. 환자의 데이터베이스를 30000 개의 레코드로로드했으며 환자 검색 화면의 응답 시간이 20 초 이상입니다. 데이터베이스를 인덱싱하고 불필요한 모든 호출을 제거했습니다 a. 클라이언트에서 웹 서비스로 b. 웹 서비스에서 데이터베이스로. 여전히 응답 시간은 7 초이며 3 초 이내에 내려야합니다. 웹 서비스가 네트워크를 통해 클라이언트와 같은 크기의 데이터를 반환하는 부분으로 간주되는 주된 문제는 4 초입니다.

이 해결책은 무엇입니까?

+0

json과 압축이 도움이 될 수도 있습니다. –

답변

2

검색 쿼리가 큰 결과 집합을 반환하면 웹 서비스 호출에 페이징 기능을 추가하는 것을 고려할 수 있습니다.

한 번에 250 명 (또는 임의의 수> 10 명)의 환자를 검토하지는 않습니다. 따라서 250을 모두 반환하는 메서드 대신 10을 반환 할 수 있습니다. 웹 메서드가 약간 변경되면 서명을 변경해야합니다.

이렇게하면 네트워크 페이로드가 감소합니다.

비싼 쿼리를 너무 자주 실행하지 않도록 검색 결과를 서버에 캐시 할 수 있습니다.

이것은 해결책의 일부일 수 있지만 다른 옵션이 많이있을 것입니다.

행운을 빈다.

+0

이것이 유일한 해결책입니다. 그것에 추가하기 : 실제로 필요한 것을 보내어 전송하는 데이터의 크기를 줄이는 것이 좋습니다. 이는 백엔드가 프론트 엔드가 알아야 할 점 (나쁜 스타일)을 알아야하지만, 대역폭 사용을 크게 줄일 수 있다는 단점이 있습니다. – dbemerlin

+0

그것은 _a_ solution 일 수 있습니다. 하지만 그것은 좋은 것일 수는 없습니다. 우리를 위해 너무 많은 것을 알지 못합니다! ;-) – Marijn

1

쿼리가 인덱스를 사용할 수 있는지 확인하십시오. SQL Server에서 테이블을 인덱싱하는 가장 쉬운 방법은 Sql Server Tuning Wizard를 사용하는 것입니다. 문제를 진단하는 또 다른 방법은 서비스에 Ping 메서드를 추가하는 것입니다. 이렇게하면 네트워크 대기 시간을 확인할 수 있습니다. Cache 개체를 사용하여 일반 레코드를 캐시 할 수도 있습니다. SQL 서버의 30000 행이 전체 바다에 대한 물방울보다 적습니다.

1

실제로 클라이언트에게 유용한 데이터 만 반환하는지 확인하십시오. 웹 서비스가 데이터베이스에 앉아있는 것처럼 큰 데이터 세트를 반환하는 것은 너무 쉽습니다. 속도가 정말로 중요하다면, 클라이언트 시스템으로 리턴되는 정보의 양을 줄이기 위해 할 수있는 한 많은 작업을 수행하여 취해야하는 조치에 즉시 필요한 정보만을 정리해야합니다.

만들어진 웹 서비스 호출과 관련된 정보 만 포함하는 웹 서비스를 통해 전달되는 일부 프록시/datacontract 객체를 설정할 수 있습니다. 간단한 예제는 이름, 주소, 전화 번호 등을 반환하는 대신 사람의 이름 만 반환하는 것입니다.

0

실제로 네트워크를 통해 전송되는 데이터 양이 문제인 경우. 데이터 양을 줄이는 것 외에도 몇 가지 옵션이 있습니다.) 물리학 법칙을 바꾸기 전에 Scotty가 "Capin, I cannah phsyics의 법칙을 바꾼다"라고 말하면서,

z 속도 데이터 링크에서 y 바이트의 데이터를 전송하는 데 x 시간이 걸립니다.

데이터를 줄이는 방법은 상황에 따라 크게 다릅니다. 데이터의 구성에 따라 무엇이든지 얻을 수있는 압축 기능을 사용할 수 있지만 대부분 XML 기반이므로 압축 기능을 상당히 향상시켜야합니다.

또한 한 번에 더 적은 수의 레코드를 전송하거나 지연로드를 사용하여 필요할 때만 데이터 하위 집합을로드 할 수 있습니다.

물론 3 개의 필드 만 필요로 할 때 전체 테이블을 옮기면 데이터 크기가 크게 커질 수 있습니다. 필요한 데이터 만 전송하는지 확인하십시오.