문제

최적의 버퍼 크기를 사용할 스트림에서 호출.GetResponseStream()?

온라인 예는 다 256b 을 만큼 5 킬.어떤 장점이 있나요?내 생각을 버퍼 크기가 될 수 있습 상황.그렇다면 어떤 상황을 사용하여 어떤 종류의 버퍼의 크기는?

감사합니다.

도움이 되었습니까?

해결책

정말로 중요하지 않습니다.

물론, 실제로 작은 버퍼를 사용하는 경우 바이트를 얻기 위해 레이어를 통해 몇 번의 추가 호출을해야 할 수도 있습니다 (스트림은 적어도 일부 버퍼링을 수행 할 가능성이 있지만 기본값이 무엇인지 모르겠습니다). 그리고 정말 큰 버퍼를 사용하면 메모리를 낭비하고 조각화를 도입 할 수 있습니다. 당신은 분명히 여기서 IO를하고 있기 때문에, 버퍼를 조정하여 얻을 때마다 IO 시간에 의해 지배 될 것입니다.

일반적으로 2048 (2k)와 8192 (8k) 사이에 2 개의 힘을 가지고갑니다. 85,000 바이트 이상의 버퍼와 함께 가면 무엇을하고 있는지 확인하십시오 (그때는 "큰 개체"및 다른 GC 규칙에 따라).

실제로 버퍼 크기보다 더 중요한 것은 얼마나 오래 보관하는지입니다. 큰 물체 힙 외부의 객체의 경우 GC는 매우 짧은 객체 (Gen 0 컬렉션이 빠르므로) 또는 매우 긴 물체 (Gen 2)를 처리하는 데 매우 능숙합니다. 해방되기 전에 1 세대 또는 2 세대에 도착하기에 충분히 오래 사는 물체는 비교적 비용이 많이 들며 일반적으로 버퍼가 얼마나 큰지보다 걱정하는 시간이 훨씬 더 가치가 있습니다.

마지막 참고 사항 : 사용중인 버퍼의 크기로 인해 성능 문제가 있다고 생각되면 테스트 그것. 가능성은 낮지 만 누가 알고있는 사람은 OS 버전, 네트워크 하드웨어 및 특정 크기의 버퍼에 이상한 문제가있는 드라이버 릴리스의 이상한 합류가있을 수 있습니다.

다른 팁

내 일화 경험있는 그것은 정말에 의존하지 않습니다 당신이 무엇을 하고 있는지만,일반적으로 아무것도 범위에서 1024-4096 바이트(1-4KB 니다.k.니다.원)에 나와 비슷한 성능(4KB 는"최고의"수 봤).

기본적으로,당신이 원하는 버퍼에 충분히 큰되지 않도록 불필요하게 읽기 데이터 스트림에서지만,그렇게 큰 당신이 감소합니다.귀하의 버퍼가 너무 큰(~MBs),당신은 증가하는 메모리 캐시 누락할 수 있는 실제로 시작을 감소하는 성능이다.물론,이는 많이 다릅 기반으로 실제 H/W(속도로 버스,캐시 크기 등),그러나 나는 것 같을 경우 4MB 버퍼가보다 느리게 4KB 버퍼(두 경우 모두는 긴 수명,그래서 GC 지 않는 문제가 있습니다.)

나 노트를 테스트하는 현재 구현하기 전에 조기 최적화를 달성할 수 있습니다.

실제로 버퍼 크기가 너무 작을 때 문제가 있습니다. 나는 그것을 테스트하고 버퍼 크기가 작은 값으로 설정되어서는 안된다는 것을 확인했습니다. 내 예에서 나는 그것을 2048로 설정하고 다운로드가 Firefox One과 비교하여 매우 느리게되고 있습니다 (Firefox One은 다운로드 세분화가 없음).

그리고 큰 크기 409600으로 설정 한 후 다운로드가 훨씬 빠릅니다. 추가 통화 비용이 오버 헤드 또는 다운로드 속도가 느려질 것이라고 생각합니다. 아마도 네트워크 수준에서 버퍼가 버퍼 크기를 초과하므로 TCP가 패키지를 다시 재판매해야합니까? (TCP가 어떻게 작동하는지 모르겠지만) 그러나 작은 버퍼 크기는 내 다운로드 속도가 느려지고 있습니다. Firefox 기본 다운로드 (추가 및 Segmenetation없이)를 사용하여 실행하고 클래스를 사용하여 테스트했습니다. 둘 다 너무 다릅니다.

이제는 루프가 완화 될 때마다 훨씬 빠릅니다. 여기서 연결이 조용하면 약 200000 바이트 (200kb)를 읽을 수 있지만 두 개의 스레드를 실행하면 훨씬 느리게 진행되며 아마도 다른 스레드와 공유해야합니다.

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