Entwickler-Ecke

Sonstiges (.NET) - Stapelgrösse erhöhen


georgeboy - Fr 15.01.21 10:52
Titel: Stapelgrösse erhöhen
Hallo zusammen, gibt es eine Möglichkeit, die maximale Stapelgrösse vom Haupt-Thread zu erhöhen ? Ich arbeite mit VS 2008 und VS 2019 C# .NET WinForms.

Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Fr 15.01.2021 um 14:06


jfheins - Fr 15.01.21 12:30

Ja, gibt es: How to change stack size for a .NET program? [https://stackoverflow.com/a/2556970/1974021]
Man muss wohl editbin nutzen, um die exe nachträglich zu ändern.

Alternativ kannst du deinen rekursiven (?) Code auch Umschreiben und einen Stack<T> nutzen anstatt den Callstack.

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Moderiert von user profile iconTh69: C#-Tags hinzugefügt


georgeboy - Fr 15.01.21 15:14

Da stelle ich die Funktion lieber in einen Thread: Thread(new ThreadStart("ThreadMethode"), StackSize);
Stack<T> geht natürlich auch. Danke!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Fr 15.01.21 18:04

Mit editbin hättest du auch die Stacksize aller Threads beinflusst. Das eskaliert schnell.
Der Stack ist ja nicht begrenzt um uns Entwickler zu ärgern. Das hat Gründe.
Ein Überlegen ob es auch anders geht, ohne Rekursion bzw. ohne tiefe Rekursion, ist empfehlenswert.


georgeboy - Sa 16.01.21 08:03

Meine Funktion ruft sich mehrfach selber auf:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
funktion( ... )

   for ( ... )
   { 
     ...
     funktion( ... )
     ...
   }

Danke !!!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


jaenicke - Sa 16.01.21 09:16

user profile icongeorgeboy hat folgendes geschrieben Zum zitierten Posting springen:
Meine Funktion ruft sich mehrfach selber auf:
Dass es um rekursive Aufrufe geht, war klar. Aber die Anzahl dieser rekursiven Aufrufe kann man oft mit einem veränderten Algorithmus verringern.


georgeboy - Sa 16.01.21 14:19

Mit Memoisation ? Wenn nicht, dann würde mich das interessieren.


jaenicke - Sa 16.01.21 17:15

Das kommt auf den Algorithmus an. Oft kann man den Algorithmus recht einfach modifizieren.

Die Fibonacci-Folge ist ein gutes Beispiel. Da ist der nicht-rekursive Algorithmus genauso einfach wie der rekursive.

Memoisierung ist ein weit gefasster Begriff. Natürlich muss man auch ggf. Variablen zur Zwischenspeicherung verwenden. Das ist aber nicht das, was man mit Memoisierung meint. Da geht es darum, dass man mehrere gleiche Aufrufe vermeidet, indem man die Ergebnisse zwischenspeichert. Das hat mit der Umwandlung einer rekursiven Funktion in eine nicht-rekursive wenig zu tun.


georgeboy - So 17.01.21 08:26

Danke Dir !!!