Entwickler-Ecke

Andere .NET-Sprachen - Zeiger und .Net


ADis - Do 15.04.04 11:41
Titel: Zeiger und .Net
Hi,

Wie vielleicht schon mancher bemerkt hat gelten Pointer im .Net als veraltet(unsafe) und nicht mehr zulässig.
So nun nach der Frage der Alternative :?

Ich liefere hier mal ein D7 Beispiel:

Es sollen für eine 3 Dimensionale Kurvenberechnung einen Dynamischen Speicher pro datensatz reserviert werden. Um Ressourcen zu sparen und die Programmperfomance zu optimieren denke ich dass statische Speicherreservierung unsinnig ist, denn ich weiß nicht unbedingt wieviel Daten mir die Datenbank für eine bestimmte Kurve liefert.


Delphi-Quelltext
1:
Pkt                   : array[0..10,0..10of ^real;                    

Also hier die Deklarierung eines Kurvenpunktes der aus 11x11 Parameter zusammengesetzt wird.


Delphi-Quelltext
1:
2:
3:
4:
{Dynamische Speicherreservierung}
  For i := 1 to AnzahlPunkte_X do
     For j := 1 to AnzahlPunkte_Y do 
         New(Pkt[i,j]);


Hier kommen dann Berechnungen, Kurvenausgabe, bla, bla ....


Delphi-Quelltext
1:
2:
3:
4:
{Dynamische Speicherfreigabe}
  For i := 1 to AnzahlPunkte_X do
     For j := 1 to AnzahlPunkte_Y do 
        Dispose(Pkt[i,j]);


Und natürlich muss der Speicher wieder freigegeben werden.


Wie meint Ihr soll nach .Net vorgegangen werden um effizient auf Speicher bzw. Dynamischen Variablen zuzugreifen und zu verarbeiten.

Thx 8)

Moderiert von user profile iconPeter Lustig (15.04.2004, 11:53): Code- durch Delphi-Tags ersetzt


mirage228 - Do 15.04.04 14:49
Titel: Re: Zeiger und .Net
ADis hat folgendes geschrieben:
Hi,

Wie vielleicht schon mancher bemerkt hat gelten Pointer im .Net als veraltet(unsafe) und nicht mehr zulässig.
So nun nach der Frage der Alternative :?

Ich liefere hier mal ein D7 Beispiel:

Es sollen für eine 3 Dimensionale Kurvenberechnung einen Dynamischen Speicher pro datensatz reserviert werden. Um Ressourcen zu sparen und die Programmperfomance zu optimieren denke ich dass statische Speicherreservierung unsinnig ist, denn ich weiß nicht unbedingt wieviel Daten mir die Datenbank für eine bestimmte Kurve liefert.


Delphi-Quelltext
1:
Pkt                   : array[0..10,0..10of ^real;                    

Also hier die Deklarierung eines Kurvenpunktes der aus 11x11 Parameter zusammengesetzt wird.


Delphi-Quelltext
1:
2:
3:
4:
{Dynamische Speicherreservierung}
  For i := 1 to AnzahlPunkte_X do
     For j := 1 to AnzahlPunkte_Y do 
         New(Pkt[i,j]);


Hier kommen dann Berechnungen, Kurvenausgabe, bla, bla ....


Delphi-Quelltext
1:
2:
3:
4:
{Dynamische Speicherfreigabe}
  For i := 1 to AnzahlPunkte_X do
     For j := 1 to AnzahlPunkte_Y do 
        Dispose(Pkt[i,j]);


Und natürlich muss der Speicher wieder freigegeben werden.


Wie meint Ihr soll nach .Net vorgegangen werden um effizient auf Speicher bzw. Dynamischen Variablen zuzugreifen und zu verarbeiten.

Thx 8)

Moderiert von user profile iconPeter Lustig (15.04.2004, 11:53): Code- durch Delphi-Tags ersetzt


in .NET musst du, soweit ich weiss, sog. "delegate" benutzen. Das sind Pointer mit absoluter Typsicherheit. Ich habe mich selbst noch nicht damit beschäftigt, aber in der Hilfe findest du mit Sicherheit ein Beispiel dafür.

mfG
mirage228

Moderiert von user profile iconDeCodeGuru: Der Moderationstag wurde entfernt. :wink:


Delete - Do 15.04.04 20:10
Titel: Re: Zeiger und .Net
mirage228 hat folgendes geschrieben:
Moderiert von user profile iconmirage228 (15.04.2004, 14:57): Chaosssss :D

Äh, ich habe das auch mal gemacht und einen freundlichen Hinweis bekommen.
Seitdem nutze ich das [size]-Tag (Größe 10) und das bold-Tag für mein eigenes Moderations-Tag:

Moderiert von mir selbst (heute, jetzt): so geht das ohne Ärger mit den echten Mods zu kriegen


ADis - Fr 16.04.04 08:31
Titel: AW: Zeiger und .Net
Danke für Eure Postings.

@Mirage228: delegate??? ich erzähl mal was die Hilfe schreibt:

Delegaten: Hierbei handelt es sich um eine Datenstruktur, die auf eine statische Methode oder auf eine Klasseninstanz und eine Instanzenmethode dieser Klasse verweist. Also irgendwie doch kein Pointerersatz oder?


@MathiasSimmack: Mit sowas habe ich noch nie etwas gemacht. Könntest Du paar Code-Schnipsel reinstellen, damit ich da mal rumprobieren kann wie die Performance ist?

Danke :wink:


Delete - Fr 16.04.04 10:37
Titel: Re: AW: Zeiger und .Net
ADis hat folgendes geschrieben:
@MathiasSimmack: Mit sowas habe ich noch nie etwas gemacht. Könntest Du paar Code-Schnipsel reinstellen, damit ich da mal rumprobieren kann wie die Performance ist?

Das bezog sich auf etwas, das mirage in seinem Beitrag hatte. Ich hab´ auch erklärt was es war. Mit deiner Frage bzw. dem Thema hier hatte das nichts zu tun. ;)


ADis - Fr 16.04.04 10:51

Hi,

@MathiasSimmack: :oops: War ja klar! Fettnäpfchen Nr. 1 für den Forumsgrünschnabel. Hmm ja ich habe mich auch schon gewundert, weil ich noch nie was (im Bezug auf meinThema) davon gehört hatte. Warscheinlich zuviel Quellcode in letzter Zeit gesehen. Ist der Winter schon vorbei????
Also nichts für ungut.

Jedoch habe ich immernoch keinen guten Ansatz gefunden :cry:

Bis denn


maximus - Fr 16.04.04 11:29

Pointer gibt es in .NET nicht mehr, wie du sicher schon festgestellt hast. Nimm doch statt dessen ganz normale referenzen (var x:TObject;)! IMO sind singles und alles andere in .NET sowieso objekte...viel mehr kann ich momentan auch nicht sagen :roll:


ADis - Mo 24.05.04 20:15
Titel: Zeiger und .Net (Problem gelößt)
Wenn es keine Pointer mehr gibt dann geht es eben so...

Dynamische Array's

Deklaration:

Delphi-Quelltext
1:
Dyn_Array: array of integer; // hier steht noch nicht fest wie groß das Array ist                    


und dann später in Eurem Quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
SetLength(Dyn_Array,Length(Dyn_Array)+1); //Länge des Array's definieren; hier z.B. eines größer als er vorher war
...
Dyn_Array [High(Dyn_Array)] :=Wert; //Wert z. B. auf der hösten Stelle zuweisen
...
for i:=Low(Dyn_Array) to High(Dyn_Array) do begin //Durchlaufen eines Arrays
bla bla
end;{for}


Das ganze geht natürlich auch mit mehreren Dimensionen. siehe Delphi Hilfe "Multidimensional dynamic arrays".

Viel Spass beim proggen 8)


Anonymous - Mo 24.05.04 21:10

[OT]

Zitat:

Delphi-Quelltext
1:
//Durchlaufen eines Arrays                    


Müsste das nicht Array's heißen? Ich glaube seid anfang diesen Jahres ist dass Standart. :autsch:


ADis - Mo 24.05.04 22:37

Servus,

klar ist das "Standart" jedoch wollte ich speziell auf die Low() und High() Funktion aufmerksam machen, weil jeder von uns war mal Grünschnabel :roll: in Delphi. hehe

Keep rocking


Christian S. - Mo 24.05.04 22:40

(1) Es war die Rechtschreibung gemeint.
(2) Es ist Standard, wenn wir schon dabei sind. ;-)


ADis - Mo 24.05.04 22:49

Ich Maschbaustudent also nix gut Deutsch. Aber haste recht, den Deutschdebugger sollte mal auf .NET umgestellt werden. :idea:

Aber Papa hast ja recht ich hocke mich jetzt hin und schreib erst mal ein Übungsdiktat.


Grüße aus Bayrischen 8)


Anonymous - Di 25.05.04 13:59

Tut mir leid aber diese ganzen sinnlosen Apostrophe, diesen Jahres, Standart, usw. geht einem mit der Zeit ganz schön auf den Senkel :P