2011-12-25 3 views
0

tcpClient를 사용하여 네트워크 통신을위한 몇 가지 클래스를 구축 중입니다. tcpserver 클래스는 연결을 수락하고 백그라운드 스레드로 셔플 링하여 해당 포트에서 연결을 계속 수락 할 수 있습니다. 여러 대의 클라이언트로 서버에 연결하고 서버에서 클라이언트로 파일을 전송할 수 있습니다. 내 dev 컴퓨터에서 서버와 클라이언트를 모두 실행하면 좋은 파일 전송 속도를 얻게됩니다 (160 mbps 정도 - 큰 패킷 크기를 사용하고 있습니다).tcpClient를 사용한 파일 전송의 속도가 느려짐

대용량 파일 (> 3gig)을 보내려고 할 때 전송 속도가 느려지고 변동이 심하기 때문에 여러 클라이언트의 크고 큰 파일 전송을 테스트하고 이상한 점을 발견했습니다. 만약 3 기가 테스트 파일 (.iso)을 보내려고한다면, 또한 내 dev 컴퓨터에서 실행되는 2 ~ 3 개의 다른 클라이언트를 사용하여 큰 파일 (> 500meg)을 전송하는 동안 .iso의 전송이 느려지거나 느려질 수 있습니다. 다른 클라이언트가 파일 수신을 완료 한 후에도 초당 1MB 이하로 느립니다. 아무런 이유없이 다시 속도로 픽업을 볼 수 있으며 초당 30에서 80 메가 사이에서 변동 할 수 있습니다.

오류는 없으며 코드를 살펴본 결과, 속도 저하가 어디에서 발생하는지 알 수 없습니다.

스레드 우선 순위 일 수 있습니까? 나는 큰 변수 타입을 사용하여 파일 전송의 일부 요소 (파일 크기에 대한 int64, 지금까지 들어온 바이트 양을 기록하는 또 다른 바이트)를 처리해야한다. 이러한 변수의 값이 커지면 감속

도움을 주시면 감사하겠습니다.

+0

Ok ... 실제로 클라이언트에 도달 할 때 파일 바이트를 쓰지 않으면 이러한 문제가 전혀 발생하지 않습니다. 실제로 클라이언트의 파일에 바이트를 쓰려고 할 때 어떤 일이 발생합니다. 나는 단지 바이트 배열을 쓰기 위해 FileStream을 사용하고 있습니다 ... – Pete

답변

0

받은 데이터와 디스크에 쓰는 데이터 사이에는 어떤 차이가 있습니까? 즉, 전체 시스템 메모리와 관련하여 애플리케이션의 메모리 사용 프로필이 있다면 메모리 배열에 캐싱 하시겠습니까?

+0

또한, 파일 크기가 2GB 경계를 넘을 때> 3gig .iso를 복사 할 때 속도 저하가 발생하는 것으로 나타났습니다. 거기에서 파일의 끝까지 거기에서, 나는 많은 strangeness를 가지고있다. 네트워크 속도 변동 (파일 쓰기 속도 문제라고 생각합니다.) ... – Pete

+0

네트워크 스트림과 바이트 배열을 사용하여 바이트를 읽습니다. 바이트 배열이 현재 패킷으로 가득차면 필자는 그것을 필 스트림으로 넘겨서 작성합니다. – Pete

+0

비주얼 스튜디오에서 서버와 세 개의 클라이언트를 실행하는 경우 28 메가 정도가 사용됩니다. 나는 기계에 12 기가있어. – Pete

0

LAN을 통해 파일 스트림을 작성할 때도 동일한 문제가 발생했습니다. 파일 스트림을 사용하여 파일을 쓰고 있다고 가정합니다. 쓰기 및 읽기/쓰기 액세스 사이의 액세스를 전환 해보십시오. 나는 그것이 변경을 플러시하는 좋은 일을하지 않는 읽기/쓰기 액세스라고 생각한다. 또한 파일 크기가 커지는 것을보기를 좋아하지만 파일을 작성하기 전에 파일 길이를 설정하면 성능이 좋아집니다.

관련 문제