PPC-Programm braucht zu viel Speicher

theartmix

Grünschnabel
Hi Leute,

habe ein kleines Speicher-Problem meiner PPC Anwendung.

Als erstes eine kleine Einleitung was die Anwendung machen soll:

In einem Form habe ich eine Auswahl von Personen, welche ich mir aus einer XML-Datei auslese. Jede Person hat noch zusätzlich einige Werte. Aus dieser Personenliste wähle ich max 4 Personen aus die ich im weiteren Verlauf bearbeiten (sprich, sie bekommen weitere Werte). Also füge ich erstmal die Personen in eine ListView ein (damit man auch sehen kann wen man ausgewählt hat). Anschließend lese ich die ListView und erzeuge für jede Person darin eine Instanz einer Klasse (clsPerson). Diese Instanzen speichere ich in ein ArrayList (weil ich die Anzahl der Personen nicht von vornherein kenne und sie somit dynmisch gestalten muß). Für die weitere Bearbeitung der einzelnen Personen fülle ich die Instanzen mit den gewünschten Werten und übergebe diese an andere Klassen zum Auswerten.

Das Probelm:
Sobald ich die erste Instanz von clsPerson erzeuge und ihm den Namen mit übergebe bekomme ich eine Meldung vom System, daß der Speicher zu wenig ist und ich Programme schließen soll (übrigens, es laufen keine anderen Programme)

Hier ein Ausschnitt wie es in der Klasse Person aussieht:
Code:
 //Der Konstruktor mit den werten
public clsPerson(string name, string mail)
{
                this.name = name;
	this.mail = mail;
}
public string name
{
	get
	{
	return name;
	}
	set
	{
                name = value;<-Hier bringt er mir die Fehlermeldung
	}
}
public  string mail
{
	get
	{
	return mail;
	}
                set
                {
	mail= value;
	}
}

Was könnt ihr mir dazu sagen?

Bin schon am verzweifeln.
Bitte um eure Hilfe

Vielen Dank!
 
hi,

dass du hier einen StackOverflow Fehler erhältst ist klar.
Im Set-Accessor der Eigenschaft name legst du fest:
name = value;
was bedeutet, dass die eigenschaft name immer und immer wieder (unendlich) aufgerufen wird,
was natürlich nicht gerade resourcenschonend ist.
Ausserdem sind Eigenschaften hauptsächlich zur Kapselung von Attributen da, dass heisst eine
Eigenschaft sollte im Hintergrund immer ein Attribut haben das es liest, bzw. dessen Wert es verändert.
Deine Klasse sollte so aussehen:

Code:
public class clsPerson
{
	private string name; // besser: m_name
	private string mail; // besser: m_mail
	
	//Der Konstruktor mit den werten
	public clsPerson(string name, string mail)
	{
		this.name = name;
		this.mail = mail;
	}
	public string Name
	{
		get
		{
			return name;
		}
		set
		{
			name = value;
		}
	}
	public string Mail
	{
		get
		{
			return mail;
		}
		set
		{
			mail= value;
		}
	}
}

beachte die Unterschiede in der Groß- und Kleinschreibung.
P.S.: Attributte bzw. Eigenschaften sollten sich in C# nicht nur durch eine Abänderung
der Groß- bzw. Kleinschreibung unterschieden. Deshalb ist es besser für Attribute z.b. eine Prefix m_ für die Kennzeichung einer Member-Variable verwenden.
 
Zurück