iis 파일 다운로드 속도

조사 프로세스의 일환으로 이러한 각 대안을 속도 및 메모리 사용 관점에서 비교 했습니다. 결과는 하나의 기술과 협력의 도전의 아래 테이블에서 찾을 수 있습니다 변화의 속도를 자주 오래 된 아이디어를 빼앗은 하 고 새로운 것 들을 포용 원인이 됩니다. IIS 6.0의 도입으로 ASP.NET의 아키텍처에 영향을 주지 않았습니다. IIS 6.0은 동일한 아키텍처 (aspnet_isapi 및 aspnet_wp 작업자 프로세스 완료)를 사용 하 여 작동할 수 있지만, 우리는 큰 다운로드 문제에 대 한 솔루션에 영향을 주는 프로세스 격리 라는 새로운 모델이 있습니다. 논의. 이전과 마찬가지로 프로세스 격리 아키텍처에 대 한 몇 가지 단어가 유용 합니다. 이 방법의 장점 중 하나는 개발자가 다운로드 프로세스를 보다 많이 제어할 수 있다는 것입니다. 버퍼의 크기를 변경 하 고 싶으십니까? 문제 없어요. 일부 메모리를 회수할 수 있는 기회를 청크 사이에 짧은 일시 중지 하려면 원하는? 아니 땀. 불행 하 게도, 이러한 모든 시나리오는 큰 파일에 있어서는 쓸모가 없습니다. 전송 된 파일이 손상 되거나 수준 버퍼링이 활성화 또는 비활성화 되는 방식에 관계 없이 큰 파일은 ASP.NET 프로세스에 대 한 큰 메모리 싱크가 됩니다.

writefile 메서드 사용의 증상과 메모리 증가를 감안 하 여 다음 논리적 단계는 나가는 파일을 조각으로 나누는 것입니다. 결국 inetinfo가 전체 응답을 메모리에 배치 하는 경우 작은 부분을 제공 하면 큰 파일을 전송할 때의 영향을 최소화 해야 합니다. 다음 조각이 들어오는 전에, 이전 조각은 클라이언트에 게, 전반적인 기억 사용법을 아래로 지키기에 보내진다. 다행히이 문제는 다음 코드에서 보여 주는 것과 같이 어려운 문제가 아닙니다. 를 사용 하 여 (스트림 s = 새 FileStream (파일 이름, filemode. 열기, 지금까지 설명한 것 처럼 큰 파일을 반환 하는 데 문제가 inetinfo .exe에 포함 되어 있는 것 처럼 보입니다. 더 정확 하 게, 그것은 명명 된 파이프가 aspnet_isapi와 작업자 프로세스 간의 통신에 사용 되는 주변 지역에서 발견 될 것으로 보인다. 첫 번째 시나리오에서와 같이 aspnet_isapi가 관련 되지 않은 경우에는 문제가 없습니다.

ASP.NET 요청의 큰 파일 전송은 큰 메모리 소비를 의미 합니다. 따라서 명명 된 파이프를 통해 이동 하는 데이터의 양을 줄이기 위해 수행할 수 있는 작업은 무엇입니까? 만약 당신이 인증 및 권한 부여 기능을 제공 하는 직접 액세스의 속도를 결합할 수 있는 좋은 것입니다. ASPX 페이지. 다행히도, 그 조합은 우리의 능력을 제공 하는 시간입니다. 이 아키텍처를 큰 파일에 대 한 요청을 처리 하는 컨텍스트로 넣으면 성능에 문제가 있는 이유를 확인할 수 있습니다. 파일을 통해 파이프 aspnet_isapi로 다시 이동할 때 메모리에 배치 되는 가져옵니다. 전체 파일을 파이핑 한 후에는 파일을 요청 자가 전송 합니다. 경험적 증거는 inetinfo .exe (perfmon에서 표시)와 검색 되는 파일의 크기에 의해 소비 된 메모리의 거의 일대일 증가를 제안 합니다.