작동중인 스트림이 MemoryStream 인 경우 비동기 메서드 (CopyToAsync, ReadAsync 등 ...)를 사용하지 않는 것이 좋습니다.memorystreams에서 비동기 I/O를 사용해야합니까?
this SO question에 대한 Stephen Clearly의 의견은 많은 동시 요청을 처리 할 수 있어야하는 서버 응용 프로그램에서 내가 사용하고있는 접근 방식에 의문을 제기하게했습니다.
해당 응용 프로그램에서는 모든 스레드가 낭비되지 않도록 비동기 적으로 수행됩니다. 그러나 CopyToAsync f.i. MemoryStream에서 비동기 적으로 작동하는 것은 아닙니다. 서버 애플리케이션에서도 MemoryStream에서 비동기 연산을 사용하는 것이 어떤 이점이 있는지 궁금합니다.
'MemoryStream'은 메모리가 할당되고 복사되는 것을 의미하기 때문에 일반적으로 불필요하게 성능을 발휘할 때 냄새가납니다. 그러나, 코드가 이미 비동기 상태 인 경우 사용하는 특별한 경우가 필요하지 않습니다. if (스트림이 MemoryStream입니다.) 체크가 실제 성능을 향상시키지 않을 것입니다. 메모리 스트림을 모두 제거하는 것과는 대조적입니다. 물론 YMMV와 프로파일 링을 통해 더 많은 정보를 얻을 수 있습니다. –
이미 프로파일을 작성했으며 async를 사용하면 직선 동기화를 사용하는 것보다 속도가 느립니다. 처음에 비동기식을 사용하면 애플리케이션이 과중한 부하에서 더 잘 수행 될 수 있다고 생각했지만 memorystream에 대한 비동기식은 실제로 비동기식이 아니므로 불필요한 오버 헤드를 추가하는 것이 전부입니다. 그래서 Mem-Stream에서 CopyToAsync를 사용하는 것이 무엇인지 궁금합니다. –
메모리 스트림에서 메모리 스트림으로 복사하면 얻을 수있는 것이 없습니다. 쓰기 만 사용하고 완료된 [작업] (https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,1a4dcb744a23ba6f)을 반환합니다. –