C # Compiler (csc.exe) Speicherüberlauf Compiling geschachtelte Typen und Linq

9

Ich habe ein unangenehmes Verhalten bei der Entwicklung von Visual Studio festgestellt. Es hat meinen Rechner beim Kompilieren von C # hängen gelassen.

Ich habe das Verhalten auf den nächsten minimalen Quellcode reduziert

%Vor%

Kompilieren mit

%Vor%

(unter Verwendung von Windows 8.1 Pro N x64; csc Compiler-Prozess läuft mit 32 Bit)

sightly Modifikationen erzeugen dieses Verhalten nicht (zB decimal by int ändern, eine verschachtelte Ebene reduzieren, ...), eine große Select dann reduzierend, funktioniert gut

Explizite Problemumgehung:

%Vor%

Obwohl diese explizite Problemumgehung vorhanden ist, wird nicht garantiert, dass dieses Verhalten nicht erneut auftritt.

Was ist los?

Danke!

    
josejuan 17.12.2014, 10:27
quelle

1 Antwort

3

Es scheint, dass die generische Typauflösung in diesem Fall fehlschlägt. Der Wechsel von decimal zu int funktioniert zufällig. Wenn Sie die Verschachtelungsebene erhöhen, sehen Sie, dass es auch für int fehlschlägt. Auf meiner x64-Maschine kompiliert dieser Code für int und decimal und verwendet ungefähr 2,5 GB Arbeitsspeicher, aber das Erhöhen der Verschachtelungsebene führt zu einem Überlauf, wenn die Speicherbelegung auf 4 GB anwächst.

Das Angeben des type-Arguments erlaubt explizit das Kompilieren von Code:

%Vor%

Der Compiler funktioniert auch, wenn Sie die Verschachtelung reduzieren, indem Sie die lokale Variable einführen:

%Vor%     
Krzysztof 17.12.2014, 11:42
quelle

Tags und Links