Насколько большие куски вы транслируете?
Вы можете экспериментировать с разными размерами чанков и разными стратегиями.
Также рассмотрите возможность использования Asynch IO для заполнения буферов, подлежащих передаче или после передачи.
Что я имею в виду, если ваш алгоритм потоковой передачи последовательный, например:
1. Fill a chunk
2. send the chunk
3. get confirmation
4. more chunks? Go to step 1
... тогда у вас много ненужных задержек. Если вы сможете заполнять блоки и отправлять их параллельно, вы сможете сократить время ожидания. Async IO - один из способов сделать это. У вас будет два параллельных рабочих потока. Концептуально это может выглядеть так:
Filling Chunks Sending Chunks
1. call BeginRead 1. get next chunk
2. wait for callback 2. send it
3. more to read? yes -> go to step 1 3. await confirmation
4. done 4. more? go to step 1
Но используя Async IO, они могут фактически управляться одним и тем же потоком.
Имейте это в виду:
Читали ли вы статью MS на тему потоковой передачи больших данных в WCF?