Som programátor C ++, ktorý sa snaží zabaliť hlavuokolo C # a našiel niečo, o čo ma zaujíma. Ak chcete deklarovať pole, musíte použiť nového operátora vpravo? Ale zvyknutý, že dostať odpadky kolektor zapojený?
Hypoteticky, ak som mal nejakú funkciuvytvorenie poľa len pre použitie v rámci tejto funkcie a to bolo volané tisíckrát za rám, by "t všetky tieto hovory na nového operátora vytvoriť významnú réžiu pre zberateľ odpadu?
V C ++ by to boli polia deklarované nazásobník, ktorý by spadol z rozsahu, akonáhle sa funkcia skončí a výkon réžia by bola minimálna, ale v C # I "m strach, koľko výkonu zberateľ odpadkov môže trvať v tomto prípade.
Tak som premýšľal o tom správne? Je tu zapojený zberač odpadu a spôsobí problémy? Existuje lepší spôsob, ako to urobiť?
odpovede:
0 pre odpoveď č. 1V podstate sa nemusíte starať o zberateľa odpadkov, vie, čo to robí a je to naozaj dobré.
Ak robíte veci s obrázkami, potom áno, môžete naraziť na problémy ... môžete to však obísť, napríklad môžete použiť stackalloc http://msdn.microsoft.com/en-us/library/cx9s2sy4.aspx
ale to znamená, že váš kód bude musieť byť nastavený na „nebezpečný“.
int* frameData;
frameData = stackalloc int[200];