Det er godt nok mange strings du har brug for
.
Fylder en public string meget ´mere end en dim string
Ikke helt sikker med hvad du mener. Men 'public/private/protected/internal' betegner synligheden, altså hvilke andre dele der kan se dine variabler. Dette har ingen betydning hvor meget hukommelse der bruges. Nøgleordet 'dim' bruges til at allokere data, og det er her hukommelsen begynder at blive tappet. Hvor meget afhænger af datatypen:
Lidt mere præcise beregninger, hvis du kører 64 bit .NET
En 'string' typisk bruge mindst 16 bytes, men mere proportionel med længden.
En 'int'eger vil typisk kun bruge 4 bytes.
De arrays du laver indeholder ikke strengene selv, men blot reference til strengene. De fylder 8 bytes. Når du så begynder at fylde array'en med strenge: myArray[4,3,4] = "My Super String", erstatter du 'null'-elementet med en reference til din nye streng. Referencen havde du lavet plads til, men et andet sted i .NET er der også en reference til dine streng. Strengene selv fylder også, så for hvert element ender du med at betale: 8 bytes i array, 8 bytes i .NET, 16 bytes mindst for hver streng, for i alt: 200.000 * (8+8+16) ~ 6MB for hver af dine arrays.