Determining idle network transfer bandwidth
I'm building an application that will move around some potentially large files, but I want to do it without disturbing the user's network connection by flooding it. I k开发者_运维百科now that Windows BITS has this kind of functionality, and that's essentially what I'm looking to replicate (as far as the throttling goes). I know BITS has other functionality as well that I'm not interested in, and I also have the option to consume it from .NET, but I'm interested in how it works.
I've looked online, and I haven't found a clear explanation of how exactly BITS determines how much bandwidth to consume, aside from a vague "BITS polls activity to watch for a drop in the bandwidth used by other programs." What does this mean? Bandwidth consumed by other programs can drop for a number of other reasons as well - can BITS tell the difference? If I was looking for a process that replicated this "stay just under the radar, where the user won't notice the transfers" functionality, how would I go about doing it?
UPDATE: There are a number of programs that currently do this - most notably, automatic backup programs like Mozy. They'll use just background bandwidth that's available, without slowing down other applications. Maybe they just keep increasing the transfer rate they're attempting until the real transfer rate stops increasing, and then it backs it down 10% or something. I'm curious if anybody has attempted something similar.
精彩评论