Entwickler-Ecke

C# - Die Sprache - Referenz auf Array


Macoy - Mi 15.03.06 12:23
Titel: Referenz auf Array
Hallo,

Ich habe einen recht umfangreichen Array von Daten, den ich darstellen muss. Nun befürchte ich, das dieser Array ständig real kopiert wird. Bsp.:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
class Filewrapper
{
  public float[] Data;

  void Read(){...}
}

class GraphView:UserControl
{
  float[] data;

  public GraphView(float[] data)
{
 this.data = data;
}
}

class SpectrumView:UserControl
{
  float[] data;

  public SpectrumView(float[]data)
{
  this.data = data;  
}


}

// Aufruf

FileWrapper wr = new FileWrapper();
// Daten aus Datei laden

GraphView gv = new GraphView(wr.Data);
SpectrumView sv = new SpectrumView(wr.Data);
// ... und noch weitere Controls , die auf der Datenbasis arbeiten


Wird jetzt immer eine neue Kopie des Arrays erzeugt, oder habe ich es implizit mit Referenzen zu tun ? In C++ würde ich die ganze Sache mit Pointern lösen und wüsste dann genau, woran ich bin.

Eine Alternative habe ich mir schon ausgedacht, würde die was bringen ?

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
class GraphView:UserControl
{
  FileWrapper sourceFile;

  public GraphView(FileWrapper sourceFile)
{
this.sourceFile = sourceFile;
}
}

// jetzt nur noch zugriff auf Daten mittels sourceFile.Data[x]


Was hat es eigentlich mit den Keywords "ref" und "out" auf sich ?

Mein Programm funktioniert zwar einwandfrei, aber ich mache mir Sorgen über den Speicherbedarf.

Kann ich den Speicherbedarf meines Programmes irgendwie herausfinden ?


Christian S. - Mi 15.03.06 12:38

Hallo!

Mache bitte zur Frage, wie man den Speicherbedarf herausfindet, einen neuen Thread auf. Threads, in denen mehr als eine Frage behandelt wird, enden meist im Chaos und sind daher nicht erlaubt. Danke! :-)

zum Array:
Es wird immer nur die Referenz auf dassselbe Array gespeichert. Du solltest Dir aber trotzdem überlegen, statt Arrays ein List<T> zu nehmen. Die ist zum einen flexibler, zum anderen auch schneller (siehe hier [http://blogs.gotdotnet.com/ricom/]).

Grüße
Christian


Macoy - Mi 15.03.06 13:12

Templateklassen sind doch erst ab DotNet 2.0 verfügbar, oder ?


Christian S. - Mi 15.03.06 13:14

Generics, ja, die gibt es erst ab 2.0. Ich wusste nicht, dass Du mit 1.1 arbeitest.


Macoy - Fr 17.03.06 16:07

Danke für die Hinweise. Dann werd ich wohl umsteigen auf 2.0 .