On 12/27/2012 8:47 PM, Ulrik Smed wrote:
> Arne Vajhøj wrote:
>> On 12/26/2012 2:21 PM, Ulrik Smed wrote:
>>> Arne Vajhøj wrote:
>>>> On 12/23/2012 3:06 PM, Ulrik Smed wrote:
>>>>>
>>>>> Det medfører huller i samplingen engang imellem. Bufferen er ca.
>>>>> 100ms lang, og hvis jeg gør den længere bliver min framerate
>>>>> tilsvarende lavere, det vil jeg helst undgå. Det kan selvfølgelig
>>>>> stadig skyldes andet end GC.
>>>>
>>>> 100 ms buffer er ikke meget.
>>>>
>>>> Og det er ikke nogen natur lov at større buffer giver dårligere
>>>> performance.
>>>
>>> Næhh, men buffer-full eventet vil jo trigge færre gange i sekundet
>>> med en længere buffer. Og det er umiddelbart smartest og simplest at
>>> lade det event trigge beregning og redraw. Jeg ville også få længere
>>> latency på billedet med længere buffer, også selvom jeg regner og
>>> tegner mindre bidder af bufferen ad gangen.
>>
>> Nu gør jeg ikke selv i den slags.
>>
>> Men umiddelbart ville jeg da bruge bruge en baggrundtråd til
>> at fylde buffer med og lade resten være så uafhængig af den
>> som muligt.
>
> Sådan tror jeg faktisk det allerede er. Jeg har ikke selv skrevet
> opsætningen af streamingen, det er fra et lille lyd-recorder eksempel. Jeg
> har rodet lidt med backgroundworker til beregninger og drawing, skal have
> leget lidt mere med det.
>
>> Hvis man venter på buffer fuld, så skal man da få problemer
>> med klumper.
>
> ??
> Man kan jo ikke bruge indholdet før det er til stede, man er da nødt til at
> vente til den er fuld og man får et event. Ellers skal man tracke hvor fuld
> den er, med højere rate end buffer-full eventet, det bliver noget rod, jeg
> tror slet ikke filler-pointeren er tilgængelig, det er sikkert en hardware
> DMA counter i lydkortet.
Du kan ikke kontrollere en buffer i lydkortet.
Men du kan kontrollere din egen software buffer.
Og tilgang fra flere tråde er en helt klassisk conccurrency
problem som kan løses.
>>>> Men jeg ville stadig forsøge at konfigurere GC.
>>>
>>> Jeg læste lidt om den via dine links, og det så ud til dens default
>>> konfiguration faktisk er OK til mit formål.
>>
>> Virkelig?
>>
>> Du har mistanke om at dit problem skyldes GC pauser og du foretrækker:
>>
>> Interactive
>> For most applications that have a UI.
>> This is the default mode when concurrent garbage collection is
>> enabled.
>> over:
>>
>> SustainedLowLatency
>> For applications that have time-sensitive operations for a contained
>> but potentially longer duration of time during which interruptions
>> from the garbage collector could be disruptive
>>
>> ??
>
> Fra:
http://msdn.microsoft.com/en-us/library/at1stbec.aspx
> "By default, the runtime uses concurrent garbage collection, which is
> optimized for latency". Jeg har måske misforstået noget, men det var den
> sætning der fik mig til at tænke at så er der nok ingen grund til at ændre
> det.
Begge de to jeg citerer bruger concurrent GC.
Så forslaget er ikke at skifte fra concurrent GC til
non-concurrent GC men fra concurrent interactive GC til
concurrent sustanined low latency GC.
> Jeg vil også meget hellere løse det på en pænere måde, ved at undgå
> allokeringerne.
Det er ikke pænere at skrive 10000 linier C++ kode end at
ændre på GC policy med 1 linie.
Arne