Laden...
Avatar #avatar-2343.png
preli myCSharp.de - Member
Student Österreich Dabei seit 11.07.2007 343 Beiträge
Benutzerbeschreibung

Forenbeiträge von preli Ingesamt 343 Beiträge

24.04.2008 - 18:59 Uhr

Wäre nicht ein Enumerator denkbar und sinnvoll, der die Elemente einer Liste in einer zufälligen Reihenfolge durchläuft?

denkbar -> ja
sinnvoll -> WOZU bitte?

Da es komplizierter wäre die Elemente in zufälliger Reihenfolge zu durchlaufen als der Reihe nach denke ich dass kaum jemand seinen Enumerator so programmieren würde. Elemente in zufälliger Reihenfolge wiedergeben ist eigentlich zu speziell für einen Enumerator, der sollte eher allgemein gehalten sein -> also sequenziell

Lg
Preli

24.04.2008 - 18:49 Uhr

IL steht für intermediate language (vergleichbar mit dem Bytecode von Java, wenn dir das mehr sagt). Ein .net Programm wird nämlich nicht direkt in Maschinencode übersetzt sondern eben in diesen IL.

Warum verwendest du denn eigentlich nicht statische Funktionen oder Singleton? Dass man nämlich den Klassennamen mitangeben muss ist nicht unbedingt ein Nachteil, sondern in meinen Augen ein Vorteil (übersichtlicher, leichter nachzuvollziehen, Konflikte werden vermieden, durch Intellisense sieht man gleich welche ähnliche Funktionen es noch in dieser Klasse gibt, ...)
Und das ist ja eigentlich der Hauptunterschied wenn ich das jetzt richtig verstehe. Von der Performance her dürfte auch kein Unterschied sein, denn um es wie onlinegurke auszudrücken: im IL kommt es dann ohnehin wieder aufs selbe raus 😉

Lg
Preli

24.04.2008 - 18:40 Uhr

gehe ich recht in der Annahme, dass dies keinen gewinnbringenden Geschwindigkeitszuwachs ergibt.

Keinen merkbaren jedenfalls.

Etwas zur foreach-Schleife möchte ich noch sagen: Ich bin eigentlich ein foreach-Schleifen Fan, es gibt für mich nur zwei Hauptgründe keine zu benutzen:*spezielle Reihenfolge beim Durchlaufen *ich muss wissen im wie vielten Durchlauf ich mich befinde

Lg
Preli

24.04.2008 - 13:04 Uhr

die methode möchte ich sehen, die nicht über eine klasse aufgerufen wird. Yup, ich auch.

@onlinegurke: es stimmt schon, dass VB.net und C# ähnlich "mächtig" sind, da ja alles in IL umgewandlet wird. Aber mit "von C# angebotenen Mitteln" meine ich ja genau die Sprachkonstrukte und OOP-designtechnische Möglichkeiten über die hier diskutiert wird.

Lg
Preli

23.04.2008 - 23:09 Uhr

Hallo!
Also ich muss sagen, ich finde das Projekt gut.
Es geht ja nicht darum etwas unknackbar zu machen. Wie man immer wieder sieht ist so gut wie alles knackbar, es ist nur eine Frage des Aufwandes.
Und darum geht es denk ich auch in der Softwarelizensierung. Man will es den Nutzern so anstrengend wie möglich machen die Software ohne zu bezahlen zu nutzen und wenn man ein "gutes" System dafür hat (so wie ich dieses Projekt hier als "gut" einschätze) und man von 1000 Usern die versuchen es zu hacken 900 abhällt, dann ist das etwas mit dem man zufrieden sein kann.

Lg
Preli

PS: was nicht heißt dass man nicht immer wieder versuchen sollte es zu verbessern und so viele Lücken wie möglich zu schließen

23.04.2008 - 23:01 Uhr

Nun, du arbeitest aber nicht in VB sondern in C#
Viele machen den Fehler zu C# zu wechseln, aber noch immer die Konstrukte einer anderen Sprache nutzen zu wollen. C# bietet sooo viele komfortable Dinge an, man muss sich nur ein bisschen umschauen bzw. ein paar Tutorials oder Artikel lesen und versuchen diese dann für die eigenen Probleme zu nutzen. Man sollte sich nicht fragen: "Wie habe ich das in VB genutzt", sondern viel eher "Wie kann ich mein Problem mit den von C# angebotenen Mitteln lösen"

Warum es in C# keine Module gibt genauso wie in VB ist schnell gesagt: Module so wie sie in VB vorkommen entsprechen nicht so richtig dem Gedanken der Objektorientierung und C# legt viel Wert auf Objektorientierung.

Der Singelton ist eine sehr gute Lösung für Bibliotheken zum Beispiel. Dafür muss nur ein Objekt pro Programminstanz erstellt werden, ich denke das ist verkraftbar. Eine andere Lösung wäre eine Klasse mit lauter statischen Funktionen und Properties, wenn dir das eher zusagt, wobei ich nicht ganz nachvollziehen kann warum du so bedacht darauf bist kein Objekt zu erstellen.

Lg
Preli

23.04.2008 - 09:33 Uhr

Es ist nicht ganz wurscht welche man nimmt, denn O(1) ist nicht gleich O(1)
//edit: scheinbar doch

Hab mal einen kleinen Test gemacht:


            List<string> list = new List<string>(100);
            Dictionary<int, string> dict = new Dictionary<int, string>(100);
            for (int i = 0; i < 100; i++)
            {
                list.Add(i.ToString());
                dict[i] = i.ToString();
            }

            Random r = new Random();

            for (int l = 0; l < AMOUNT; l++)
            {
                temp = list[r.Next(0, 99)];
            }

            for (int d = 0; d < AMOUNT; d++)
            {
                temp = dict[r.Next(0, 99)];
            }

//edit: hab mich vertan, ist doch ziemlich gleich schnell - mea culpa.

Dann würd ich fast auch zu dictionary raten 😉 (ist "schöner")

23.04.2008 - 09:21 Uhr

List<delegate> hat auch O(1) wenn du direkt mit Index drauf zugreifst

Lg
Preli

23.04.2008 - 08:48 Uhr

Ich denke wenn es wirklich die Zahlen 1-100 gibt ist ein Dictionary<int, delegate> überflüssig. List<delegate> wäre besser geeignet. Dictionary ist zwar schnell, aber warum soll man den Computer die richtige Position "suchen" lassen wenn man per Index direkt darauf zugreifen kann.
Mit Dictionary ist es zwar sehr schön gelöst, aber ich vermute dass List<delegate> schneller ist.

Lg
Preli

23.04.2008 - 00:19 Uhr

Ja, das wäre endlich eine sinvolle Anwendung für goto. 😁 Hätte da eher an Functionpointer gedacht. goto ist finde ich nicht mal für C empfohlen, dass ist eher was für Assembler.

Ich werde es in dem Fall einmal mit dem von xxxprod vorgeschlagenen Delegates in Array testen.

Nun das mit den delegates hab ich eigentlich auch vorgeschlagen. Ich denke um zu wissen was Performancemäßig besser ist müsste man fast beides austesten -> if-Lösung von xxxprod und delegates in Arrays.
Ich glaube dass beide Varianten recht flott sein sollten.
Aber einen Unterschied wirst du ohnehin nur merken wenn du die Funktion sehr, sehr oft aufrufst.

Lg
Preli

23.04.2008 - 00:12 Uhr

Ich hab den Code zwar nur überflogen aber ich frage mich was die erste Zeile in TouchLedModule() da macht?

SequenzPassEvent = new SequenzPassDelegate(TouchLedModule);

Ich bin mir jetzt zwar nicht sicher, aber dass deine Methoden aus der Main-Klasse nicht aufgerufen werden, könnte sein weil du dein event quasi überschreibst, bevor du es dann verwendest.
Lösch die Zeile mal raus und probiers nochmal.

An dem was xxxprod sagt könnte auch was dran sein, so einen Aufruf hab ich auch noch nie gesehen (was nicht heißen soll dass er automatisch falsch ist -> aber es könnte sein)

Lg
Preli

22.04.2008 - 23:50 Uhr

Ach ja, wenn du wirklich 100 Werte (ohne Unterbrechnung) hast bin ich mir doch recht sicher, dass ein switch schneller ist als if else.
Hier gibt es einen interessanten Artikel über das switch-Statement in C# und wie die Performance davon aussieht: http://weblogs.asp.net/justin_rogers/archive/2004/03/25/95806.aspx
Ist zwar in Englisch, aber das Lesen lohnt sich.

Lg
Preli

//edit: wenn es dir nur um Performance geht, ist der Vorschlag von xxxprod sicher seeehr empfehlenswert.

22.04.2008 - 23:36 Uhr

Wenn du C programmieren würdest, wärs recht einfach 😉

Theoretisch ist es schon möglich:
1.) Erstelle ein Interface (oder abstrakte Klasse) (A) mit einer Funktion (run) und 100 Klassen, die dieses Interface implementieren (von dieser Klasse abgeleitet sind) und alle die Funktion run implementieren.

2.) Dann nimmst du ein Array oder eine List<A> und speicherst in jedes Element ein Objekt einer Klasse. Über den Index könntest du dann direkt an die Stelle (und den richtigen Code springen).

Eventuell lässt sich das ganze auch einfacher machen z.B. mit delegates, mit der oberen Variante würds auf jeden Fall klappen.
Einen merkbaren Performancevorteil würde dir das natürlich nicht verschaffen (wenn du darauf aus bist), da ja auch C# intern prüfen muss um welches Objekt es sich handelt und welcher Code nun ausgeführt werden soll.

Lg
Preli

22.04.2008 - 21:51 Uhr

Hallo, die AppendAllText Idee ist eigentlich gut, hätt ich auch so gemacht. Du musst nur vorher sicherstellen dass die Datei nicht gesperrt ist (hast du ja schon richtig erkannt).
Dass du document auf null setzt bringt da natürlich nichts, du musst auf jeden Fall mal den XmlWriter schließen -> XmlWriter.Close(); also in deinem Fall xWrite.Close();
Dies schließt (laut MSDN) den benutzten FileStream und du solltest den Text anhängen können.

Lg
Preli

22.04.2008 - 20:12 Uhr

Um unnötige Leerzeichen zu entfernen ist sicherlich String.Trim() hilfreich

Lg
Preli

22.04.2008 - 20:11 Uhr

Ja, herbivore hat recht ASCII bringt Probleme mit sich, da ich bei zwei unterschiedlichen long Werten auch immer zwei unterschiedliche strings haben möchte.

Jedoch habe ich dieses Problem auch mit jedem anderen Encoding wie z.B. UTF8 - auch wenn ich verschiedene long-Werte umwandel kommen ab und zu die selben strings raus, da nicht druckbare Zeichen scheinbar als gleich angesehen werden (vermute ich mal).

Jetzt lass ich mir die Zahl einfach Hexadeximal anzeigen, dann hat der string max. 16 Zeichen (zwar doppelt so viel wie der long Wert bytes hat, aber das ist verkraftbar)

Lg
Preli

22.04.2008 - 13:15 Uhr

Vergiss das spaltenweise auslesen. Textdateien werden grundsätzlich zeilenweise eingelesen und jede Zeile dann für sich analysiert.
Damit die spaltenweise einlesen könntest müsste wirklich jede Zeile exakt gleich viele Zeichen beinhalten (also auch Leerzeichen am Ende) und du müsstest dauernd in der Datei hin und herspringen, was sich negativ auf die Performance auswirkt.

Lg
Preli

22.04.2008 - 09:45 Uhr

Hallo,

Also was du mit dem GetListElements meinst ist mir nicht so klar, da alleine die Namensgebung merkwürdig ist. Get sollte ja eigentlich etwas zurückliefern. Ich denke du machst das etwas zu kompliziert.


List<ClassA> list = new List<ClassA>();
//... Liste füllen
foreach(ClassA temp in list)
{
  Button b = new Button();
  b.Text = temp.Prop1;
  b.Left = ...
  b.Top = ...
  b.Click += new EventHandler(b_Click);
  Controls.Add(b);
}

//eigene Funktion
void b_Click(object sender, EventArgs e)
{
  (sender as Button).xxx //so kann dann auf DEN Button zugegriffen werden, der geklickt wurde
}

Wobei sich fast eine for-Schleife auch eigenen würde, da du dann eine Laufvariable (nennen wir sie mal i) hast und die Top-Eigenschaft danach berechnen kannst. b.Top = i * ("buttonhöhe" + "abstand");

Über Controls.Add wird der Button dann tatsächlich auch auf der Form angezeigt (vorausgesetzt dieser Code befindet sich "in" einer Form)

Vielleicht nicht ganz so einfach für einen Anfänger, ich weiß, schau ab und zu vielleicht ins 🛈 daraus kann man echt viele Grundlagen lernen.

Lg
Preli

21.04.2008 - 22:42 Uhr

Hmm, wenn du einen Long übergeben willst, warum deklarierst du den Parameter dann nicht als Long?

Ich benutze eine nicht von mir programmierte Bibliothek und die will einen string haben. Ich könnte das Ganze jetzt umprogrammieren, aber das wäre recht anstrengend, da ziemlich viel auf diesen string aufbaut.

Lg
Preli

21.04.2008 - 21:50 Uhr

Danke für die Warnung, aber auf der anderen Seite wartet weder eine C/C++ Applikation noch ein StringBuilder.
Hab gerade bemerkt, dass values.ToString(); mir nur "System.Char[]" liefert, also doch mit Encoding.

Lg
Preli

21.04.2008 - 21:39 Uhr

Aja, danke der BitConverter. Konnte mich nicht mehr erinnern, aber ich wusste dass man irgendwie auf die einzelnen Bytes zugreifen kann.

Das Encoding.ASCII.GetString(values); werd ich mir schenken und stattdessen einfach values.ToString(); durchführen, da mir es mir ziemlich schnuppe ist ob ASCII oder nicht. Es muss ja nicht ausgegeben werden.

Lg
Preli

//edit: oder greift values.ToString(); auch auf ein Encoding-Schema zurück???

21.04.2008 - 21:21 Uhr

Hallo!

Was ich möchte ist einen long (Int64) Datentyp in einen string umwandeln - ABER nicht mit .ToString()
Ich brauche nicht die Zahl als string für eine Ausgabe, sondern einen string, der genausoviele bytes belegt wie der long Datentyp (also 8 byte) und quasi einen bestimmten long-Wert repräsentiert.
Ich will also quasi einen long wie einen string ansprechen.

Kling jetzt etwas komisch, also wozu brauch ich das: ich hab eine Funktion, die einen string als Übergabeparameter entgegennimmt. Ich hab aber eine Zahl (long) die ich jetzt als string übergeben möchte. Wenn ich aber .ToString nehme ist nicht sichergestellt dass der string immer gleich lang ist (muss aber so sein)

Vielleicht kann man eine Zahl ja irgendwie in ein Char-Array umwandeln und das dann in einen string oder so... wäre jedenfalls recht froh für irgendwelche Ideen.

Lg
Preli

PS: es sollte natürlich so performant wie möglich sein

21.04.2008 - 18:36 Uhr

Hallo,

Wenn ich dir mal einen Tipp geben darf, dein XML-Dokument schaut etwas merkwürdig aus. Ich denke es wäre besser etwas in der Art zu machen:


<serverlist>
  <server>
     <dbname>dbname_1</dbname>
     <user>user_11</user>
     <pwd>pwd_11</pwd>
  </server>
  <server>
     <dbname>dbname_1</dbname>
     <user>user_12</user>
     <pwd>pwd_12</pwd>
  </server>
</serverlist>

2.) Zum Auslesen gibt es Klassen wie den XmlTextReader, oder über ein DataSet (dataset.ReadXml) oder auch mit XmlDocument.Load (oder so ähnlich)
Meiner Meinung nach Geschmackssache

3.) Würde ich die Daten nicht in Array von Arrays speichern, sondern eine eigene Klasse Server (oder ein anderer Name) anlege mit den Eigenschaften dbname, user und pwd. Und davon ein Array oder noch besser eine List<Server> machen.

List<Server> liste = new List<Server>();

Dann kannst mit mit liste.Add zum Beispiel neue Objekte hinzufügen, Objekte löschen, auslesen, ... ist einfach komfortabler als Arrays
Der Zugriff auf die einzelnen Objekte würde dann wie folgt aussehen:

string dbname = liste[position].dbname; //so würdest du z.B. an den Namen kommen

4.) Welche Controls meinst du über die .Net verfügen sollte?
Buttons -> ja natürlich - nennt sich Button
oder etwas zum Herstellen einer Datenbankverbindung -> gibts natürlich auch z.B. SQLConnection für den SQL-Server

5.) der Vollständigkeit halber will ich dir auch noch sagen wie du (wenn du es mit zweidimensionalen Arrays machen würdest, was ich aber ganz und gar nicht empfehlen kann) auf die zweite Dimension zugreifst.


int posServer;
string dbname = array[posSever][0];
string user = array[posServer][1];
string pwd = array[posServer[2];
//Angenommen du hast es auch in dieser Reihenfolge reingespeichert

Lg
Preli

21.04.2008 - 13:56 Uhr

Klar, du kannst eine gerade laufende EXE nicht ersetzen.

Eine Möglichkeit wäre:
Du hast auf deinem USB-Stick ein Programm, welches selbst nicht kopiert wird, aber den Kopiervorgang durchführt (nennen wir es mal copy.exe). Diese copy.exe muss von deinem Programm (welches du ersetzen willst) gestartet werden. Danach muss sich dein Programm am Besten selbst beenden. Copy.exe sollte mit dem Kopieren etwas warten (0,1 - 0,5 Sekunden) bevor es mit dem Kopieren startet, damit die andere Exe-Datei genug Zeit hat sich zu beenden.

Theoretisch kann auch Copy.exe die laufende Anwendung beenden.

Lg
Preli

21.04.2008 - 11:00 Uhr

Also C# kann ich dir auf jeden Fall empfehlen, nicht weil ich C#-Fan bin, sondern weil man gerade kleine Anwendungen schnell, einfach und ohne zu großen Aufwand entwickeln kann.

ZU 2. die Prof. ist natürlich nicht kostenlos (Microsoft will ja auch was dran verdienen)
ZU 3. die Express ist für alle kostenlos (soweit ich weiß) und haben halt ein paar Features weniger. Du kannst zwar dasselbe machen aber musst auf ein paar Annehmlichkeiten verzichten

Lg
Preli

21.04.2008 - 10:47 Uhr

Ich glaub wir reden da etwas aneinander vorbei.
ReadLine gibt genau eine Zeile (ALS STRING) zurück. Dieser string hat eine Länge, die genau der Anzahl an Characters entspricht, die aus der Datei gelesen wurden.


 FileStream fs = new FileStream(DatPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, 16);

//fs.Seek(0, SeekOrigin.Begin); //->kann man sich eigentlich sparen

StreamReader reader = new StreamReader(fs);
long pos = 0;

...
.....foreach....

string line = reader.readLine();
pos += line.Lenght;

.....

Jetzt klarer?

Lg
Preli

21.04.2008 - 10:40 Uhr

Ja wie denn?
Readline gibt ja nicht mal die Anzahl der gelesenen Zeichen zurück...

Aber einen String der die Eigenschaft Length hat 😉

Lg
Preli

21.04.2008 - 10:33 Uhr

..weil Filestream puffert, gell?

Genauso ist es.

Aber wie kriege ich die Position vom Streamreader????
reader.Position gibts halt nicht...

Stimmt das hab ich jetzt übersehen.
Nun du wirst dir wohl merken müssen wie viele Zeichen du ausgelesen hast um die Position zu wissen.

Lg
Preli

21.04.2008 - 10:22 Uhr

Du brauchst die Position vom StreamReader nicht vom Stream!

Lg
Preli

21.04.2008 - 10:19 Uhr

die Vorgabe, dass der B+-Tree in einem Stream verwaltet werden soll, scheint mir doch recht spezifisch.

Ja, stimmt. Ist schon recht spezifisch, aber wenn solche Bäume seeehr groß werden kann oder möchte man sie halt nicht im Speicher halten.

Ich vermute, dass muss du wirklich selber schreiben. Aber du kannst natürlich den Quellcode der gefundenen Implementierung als Basis verwenden, um deinen eigene Aufwand zu reduzieren.

Ich hab mir den Quellcode bereits angesehen. Leider ist er nicht dokumentiert - ich glaub im ganzen Code kommen drei Kommentare vor (so in der Größenordnung). Ich denke wenn dann werde ich ihn von Grund auf neu schreiben und mir eher von wo anders allgemeine Codeschnippsel über B+-Bäume holen.

Danke für die Antwort

Lg
Philipp

20.04.2008 - 18:51 Uhr

Eigentlich muss man das ersetzen doch bestätigen!

Wie schon gesagt, ich kann mir wirklich nicht vorstellen, dass wenn du mit einem C# Befehl eine Datei überschreibst der Benutzer einen Dialog bekommt. Zu Prüfen ob diese Datei schon existiert und ob überschrieben werden soll oder nicht unterliegt dem Programmierer.
Aber wenn du sicher gehen willst probiers doch mal aus (oder warte auf weitere Rückmeldungen von anderen)

Lg
Preli

20.04.2008 - 11:24 Uhr

Soweit ich weiß wird der Name der Assembly vorne mitangehängt als Name.
statt "cmd5c_03.gnu.txt" müsstest du dann eher sowas wie "ProgrammName.cmd5c_03.gnu.txt" schreiben.

Du kannst dir ja zum Testen die einzelnen Ressourcen ausgeben lassen:


string [] res = a.GetManifestResourceNames();
foreach(string s in res)
  Console.WriteLine(s);

Lg
Philipp

19.04.2008 - 22:42 Uhr

Eigentlich sollte es auch in Konsolenanwendungen funktionieren.
Wenn du so wie im Tutorial drauf zugreifst musst du System.Reflection einbinden, liegts vielleicht daran?
Oder fragen wir so --> warum funktioniert es denn nicht bzw. wie äußert sich das nicht funktionieren?

Lg
Philipp

19.04.2008 - 18:46 Uhr

Oder willst du keine zusätzlichen Dateien haben, dann gibts immer noch die Möglichkeit das ganze als ressource "einzubauen".

Das wäre meine erste Wahl.🙂 Kannst du mir vielleicht kurz erläutern wie ich das hinbekommenn kann?!

Nun am besten du schaust dir dazu ein Tutorial an so wie dieses zum Bleistift: http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=75

Muss zugeben bis jetzt hab ich das auch nur mit Bildern gemacht, aber mit Text sollte es natürlich auch funktionieren.

(Wenn du meinst, dass ich sonst einfach Texdateien 1:1 in den SourceCode kopiere, dann kann ich dich beruhigen, das tue ich nicht.😉)

Da bin ich aber beruhigt.

Lg
Philipp

19.04.2008 - 18:40 Uhr

Du darfst aber auch das äußere Not nicht unterschlagen:

Hab ich auch nicht, darum hab ich ja (actDate.DayOfWeek != DayOfWeek.Friday) geschrieben statt (actDate.DayOfWeek == DayOfWeek.Friday)

Lg
Philipp

19.04.2008 - 17:04 Uhr

Wie wärs wenn du einfach diese zwei Dateien als Textdateien mitlieferst und dann zeilenweise ausliest und auf der Console ausgibst (wenn dies der Benutzer auswählt)

Oder willst du keine zusätzlichen Dateien haben, dann gibts immer noch die Möglichkeit das ganze als ressource "einzubauen".

Lg
Philipp

//edit: Das ganze direkt in den SourceCode zu kopieren ist (hoffentlich) eher unüblich

19.04.2008 - 16:54 Uhr

Hallo!

Würde eher < als **≤ **benutzen:


if ( (actDate.DayOfWeek != DayOfWeek.Friday) || (actDate.Hour < 22) )

Lg
Preli

19.04.2008 - 15:18 Uhr

So einiges spricht dagegen:
1.) viiieeel Aufwand / Arbeit
2.) recht komplexe Angelegenheit

Aber ich hab mir das selbst schon überlegt, da ich bis jetzt noch nichts gefunden habe. Ich werd derweilen mal mit der Variante die ich schon gefunden habe Vorlieb nehmen und eventuell wenn ich Zeit dazu habe mir selbst eine programmieren.
Werd sie dann natürlich in die ".NET-Komponenten und C#-Snippets" Abteilung reingeben sollt ich Tatsächlich sowas programmieren.

Lg
Philipp

18.04.2008 - 20:22 Uhr

Hallo!

Wie der Titel schon vermuten lässt bin ich auf der Suche nach einer guten B+-Tree Implementierung für C#.
Hätte zwar eine gefunden (http://bplusdotnet.sourceforge.net/ die aber ein paar Nachteile hat:

  • braucht sehr, sehr viel Speicherplatz
  • man kann nur nach genau einem Key suchen und nicht nach allem was größer oder kleiner als ein bestimmter Key ist (oder ich bin noch nicht draufgekommen wie)

Weiß jemand eine alternative Implementierung? Wichtig ist noch, dass ich den Baum nicht im Speicher haben will, sondern auf der Festplatte, also optimal wäre wenn die Implementierung mit Streams arbeitet (so wie die oben genannte).

Lg
Preli

//edit: im Notfall kanns auch ein Binärbaum sein

17.04.2008 - 19:18 Uhr

warum einfach wenn's auch kompliziert geht?

Probiers doch damit:


  string s = "Hallo Hallo Hallo";
  string sneu = s.Insert(s.IndexOf(' '), "#");

Wenn wirklich nur ein Zeichen eingefügt werden muss ist das schneller und einfacher als über einen StringBuilder. Wenn viele Zeichen eingefügt werden sollen wäre StringBuilder wahrscheinlich besser geeignet (wenns um Performance geht)

Lg
Philipp

17.04.2008 - 18:45 Uhr

Die Neue "play.exe" wird leider nicht durch die ältere überschrieben, da
auch WinCE nach dem "Would you like replace the existing file" fragt

Ich frag jetzt auch nochmal nach (so wie WinCE): meinst du WinCE fragt nach wenn du mit einem Programm eine Datei durch eine andere ersetzt? Das kann ich mir nämlich nicht wirklich vorstellen.
Eine andere Idee von mir (keine Ahnung ob das so klappen würde): alte play.exe löschen und dann erst die neue play.exe reinkopieren, dann wärs kein ersetzen mehr.

Lg
Philipp

17.04.2008 - 18:40 Uhr

Also es gab da mal in Java etwas das nannte sich "private protected" und entsprach dem C#-protected. Ist jedoch schon veraltet und existiert nicht mehr (soweit ich weiß).
Ein Schlüsselwort equivalent zum "protected" aus C# gibt es denk ich nicht. Soweit ich informiert bin gibts in Java nur mehr: public, private, protected, default (steht auch so auf Wikipedia)

Lg
Philipp

PS: da bleibt wohl nur noch eine Möglichkeit: zu C# wechseln 😉

17.04.2008 - 12:30 Uhr

Ich bezweifle dass der Compiler weiß ob ein bestimmter Pfad korrekt ist, da dies erst zur Laufzeit des Programmes überprüft wird. Schau nochmal nach kommt eine Compilermeldung oder ein Laufzeitfehler (Exception)?
Ich trau mich jetzt mal zu behaupten dass du noch Anfänger bist, also kann ich dir dies hier empfehlen: 🛈

Lg
Philipp

17.04.2008 - 12:16 Uhr

Es wäre sehr hilfreich wenn du den Fehler hinschreiben würdest 😉

Da du nichts genauer geschrieben hast, rate ich einfach mal:


DirectInfo.GetFiles().Length.ToString();

Lg
Philipp

11.04.2008 - 09:17 Uhr

Hallo!

Interessant wäre ob vielleicht m_Cache oder m_Cache.Relations null ist. Aus deinem angehängten Bild geht ja nur hervor dass aRelations ungleich null ist.

Lg
Preli

PS: DataSet ist kein Datenbanksystem

09.04.2008 - 14:28 Uhr

Wenn du Threads benutzen möchtest wirst du Control.Invoke benutzen müssen.
Soweit ich mich recht erinnere gibt es jedoch irgendwo im myCsharp.de Forum ein Thema das diese Thematik behandelt und sogar eine Klasse zur Verfügung stellt mit der man nicht immer "händisch" Invoke aufrufen muss. Vielleicht findet ja jemand dieses Thema wieder.

Lg
Philipp

08.04.2008 - 20:03 Uhr

yup, seh ich genauso. Für Echtzeit kritische Anwendungen ist C# jetzt vielleicht nicht die erste Wahl.
Das der Start länger dauert da muss ich dir recht geben, allerdings ist das bei den meisten Serveranwendungen auch nicht so relevant da die meisten Serverapplikationen wie Datenbankserver ohenhin etwas länger zum Starten brauchen. Ein paar Sekunden mehr oder weniger spielen da wahrscheinlich auch keine Rolle mehr.

Lg
Philipp

08.04.2008 - 19:43 Uhr

Hallo allerseits!

Wie ich letztens ein wenig über C# und das .Net Framework nachdachte ist mir aufgefallen dass es einige gute Gründe gibt C# zur Entwicklung von Serveranwendungen zu benutzen. Sprich Anwendungen die ständig auf einem Server laufen und Clientanfragen entgegennehmen. z.b. Datenbankserver, Webserver, ...

Nun würde mich mal interessieren wie ihr so dazu steht?

Ein paar Punkte warum ich so denke:

  • Speicherlecks können sich nicht so leicht einschleichen dank Garbagecollector
  • große Auswahl an Klassen die man für Algorithmen die Serverapplikationen benötigen gut gebrauchen kann: Threads, Datenstrukturen (Queue, Dictionary, Hashtable), Netzwerkklassen, Datenbankanbindungen, ...
  • der Garbagecollector entfernt nicht nur Objekte aus dem Speicher sondern ordnet die Daten auch immer wieder neu an sodass der Arbeitsspeicher nicht "defragmentiert" wird. Somit kann das Programm lange laufen ohne Performanceverluste hinzunehmen.
    (- Einigermaßen Plattformunabhängig dank Mono)

Vielleicht fallen jemanden noch Punkte ein - oder auch Punkte warum C# nicht so gut geeignet ist.
Der Grund dass C# langsamer ist als C oder C++ find ich persönlich nicht so schlimm da dieser Unterschied meist gar nicht mehr so groß ist (bei den neueren .net Versionen) und einem Server 25% mehr Leistung zu spendieren ist ja auch nicht so die Welt.
(Wobei ich jetzt auf keinen Fall ein Diskussion C++ versus C# anstiften möchten!!!)

Mfg
Preli

08.04.2008 - 19:28 Uhr

Nun Idee hätt ich schon eine:
Du machst aus den zwei XML-Dokumenten ein XML-Dokument.

Könnte dann zum Beispiel so ungefähr aussehen:


<documents>
<document>
...  erstes XML Dokument ...
</document>
<document>
... zweites XML Dokument
</document>
</documents>

Mfg
Preli

08.04.2008 - 19:23 Uhr

Über den Designer ist es nicht möglich, ich glaub es ist möglich wenn du den Code den dir der Designer erstellt direkt bearbeitest. Kann ich dir aber nicht empfehlen: hab mal bei einem meiner Programme einen Typ benutzt der vom Designer nicht unterstützt wird. Hat eine Menge Schwierigkeiten gemacht, denn jedesmal wenn ich dann im Designer etwas geändert habe hat er mir den Typ umgeändert.

Mfg
Preli