Czytanie Stream, limit prędkości

0

Witam
Chciał bym limitować prędkość zapisu danych na ustaloną przez użytkownika prędkość.
W pętli kręci się

Stream.Read()

Chciał bym ograniczyć prędkość zapisu, w tym celu używam

Thread.Sleep()

jednak nie mogę sobie poradzić z obliczeniem wartości, ile ma czekać.

Właściwe pytanie: Jakie obliczenia wykonać, aby Sleep trzymał pętle tak, żeby prędkość była taka, jak ustalona przez użytkownika, uwzględniając rozmiar bufora i ilość aktywnych plików? Limit dobrze trzyma, ale nie taki jak trzeba.

0

Pytanie, co chcesz dokładnie osiągnąć. Thread.Sleep() nie nadaje się do precyzyjnego regulowania pracy aplikacji bo w zależności od środowiska, systemu itp. może zatrzymywać wątek na różne okres czasu.

0

Chciał bym, że jak user ustawi 1234kB/s to tyle będzie w miarę możliwości (zależnie od rozmiaru bufora, bo przez jego rozmiar może być trochę mniej).
Coś w stylu: https://gist.github.com/passy/637319

0

Tamta klasa wygląda ok, ale problemem jest Thread.Sleep który może działać nieprzewidywalnie. Jeżeli streamujesz dźwięk to może być problemem ale spróbuj.

Jeżeli będzie potrzebna większa precyzja, to musisz użyć usługi Multimedia Timer: https://msdn.microsoft.com/en-us/library/windows/desktop/dd742877(v=vs.85).aspx

0

Nie potrzebuje dużej precyzji, to tylko przenoszenie danych (przez sieć też). Limitowanie tylko po stronie klienta, jeśli chce, to tylko dodatkowa opcja.

Z moich obliczeń na kartce wyszło, że może to wyglądać tak:
(1000 / (Limit usera / rozmiar bufora)) * Ilość aktywnych plików

Przy takim obliczaniu mam 240kB/s a limit ustawiony na 1000. Nie wiem czy źle to liczę, czy coś z tą czwórką zrobić :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1