Mark,
Thanks for the detailed reply. My requirement is to get an end to end latency of about 100ms using VoIP over a LAN. By my calculations that would be just about possible with a buffer size of 20ms, using asio (my initial testing in naudio would use wavein so I expect higher latency).
Read buffer 20ms.
Network latency 1ms
Jitter buffer 20ms
Play buffer 20ms
I've been reading about garbage collection in .net 4 and they have implemented background garbage collection. I've never really thought about garbage collection much, but in my understanding a thread will only pause if it needs garbage collecting or more memory while the GC is collecting generation 2 objects. With background garbage collection, the GC will yield very quickly so that the thread doesn't pause for long. I possibly haven't explained that particularly well but this page makes for interesting reading: http://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx.
In my app, the audio would run as a service, but I will have garbage collection overheads for rtp, sip and a wcf interface to the service. Will let you know how I get on; failure would mean writing a solution in unmanaged c++ or Delphi, neither of which appeals to me!
Dave