BCB5 Enterprise+XP funktioniert nicht



  • the_hero99:
    Du könntest versuchen, mit Tools wie CodeGuard (Lieferumfang bei Enterprise und evtl. Prof.) oder MemProof nach Speicherlecks zu suchen. Ansonsten bleibt halt, darauf zu achten, dass es zu jedem new ein delete gibt, dass char-Arrays ausreichend gross dimensioniert sind usw., das Übliche eben.

    Joe_M. schrieb:

    oder heißt es Jansens Vermutung?

    Unbedingt!



  • Wenn das Wetter mal schlechter wird,und ich mehr Zeit zum programmieren habe,werde ich mal alle Integer und char Arrays dynamisch erzeugen und löschen.

    Denn ich denke das knapp 90 Integer und Char Arrays viel Speicher fressen.



  • Warum nutzt du überhaupt noch C-Strings, wo es doch zum einen std::string und zu anderen AnsiString gibt (welche dir beide zur not auch ein const cahr* zurückliefern ;)) ?



  • Also ich hab vorher nur Konsolen programmiert,und kenne daher noch die Standard C++ Befehle.
    Nun wollte ich nur wissen, ob es Sinn macht alles auf Pointer und Referenzen umzustellen.
    Weil mein Programm schon 4000 Zeilen habe,ist es viel Arbeit alles umzuschreiben.



  • Wenn du Standard C++ kennst, kennst du auch std::string. Ich denke alles auf Referenzen und/oder Pointer umzuwandeln ist nicht sehr sinnvoll. Aber bei manchen sachen lohnt es sich definitiv. 😉



  • Ich weiss ja halt nur nicht was der Fehler ist, die Schleife habe ich schon vorher einmal genutzt, ohne Probleme.

    Ob es an an einen 25MB Char liegt der nicht dynamisch(Referenz,Pointer) ist, weiss ich nicht.

    Am besten ich vergess das problem auch und muss mich abfinden, dass Programme
    die ich schreibe nur auf NT freien OS laufen. Weil mir nix anderes mehr einfällt und ich auch noch keinen Konkreten Lösungsvorschlag habe.



  • the_hero99 schrieb:

    Ob es an an einen 25MB Char liegt der nicht dynamisch(Referenz,Pointer) ist, weiss ich nicht.

    😮

    Du solltest dir DRINGEND Gedanken über dein Design machen. Was willst du mit einem 25 Megabyte großen char-Array denn anstellen? Liest du Dateien ein oder was? Wenn ja, solltest du sie mappen. Zum anderen ist die Frage ob sich so einfach 25 MB reservieren lassen.



  • Also ja ich lese 25MB grosse Datei Teile ein.
    Das geht auch alles auf ein NT freien System.

    Nun weiss ich nicht was dieses verdammte XP aufmuckt.

    Ich verzweifel ich hab schon alles getestet.
    Borland auf ein XP System installed.

    Mit eingebundene DLL's,Funktionen aufgehoben und alles in je eine Funktion gequetscht usw..

    Nur ich komme nicht weiter.



  • Die NT-Versionen nach NT 4.0 (2k/XP) haben eine andere Speicherverwaltung. Hier kann nicht mehr einfach mal eben jede Menge Speicher reserviert/alloziert werden. Und 25 MB große Daten-Teile sind viel zu viel und vor allem zu unhandlich.
    Des weiteren solltest du mal Jansens Rat befolgen und deinen Code nochmal durchgehen, denn der Fehler liegt bestimmt nicht an XP. Warum liest du die Daten eigentlich in so großen Stücken ein? Veringere die Daten Menge.

    Mal interessehalber, was soll dein Programm eigentlich machen?



  • Also das Programm um was es geht http://www.c-plusplus.net/forum/viewtopic.php?t=80296 da haben alle gesagt ich soll,wegen der Effizenz alles Blockweise lesen.

    Nun sagst du es geht nicht so.

    Das ganze rennt ja unter ME nun verzweifel ich.

    Wie sagt man XP das er auch ruhig 25Mb im Speicher zuteilt?
    bzw. das geht ja auch.

    Nur die Schleifen macht er endlos.

    Und bevor jetzt einer sagt Variable nicht richtig initialisiert bzw. falsche Werte, ich habe es mit ein Debugger getestet(unter ME ohne Probleme).

    Nur wie wie wie kann ich das Tool XP kompatibel machen?

    Dann fummelt man Tage lang an einer Suchroutine die Speed hatt,und dann macht XP big trouble in little wondows.



  • the_hero99 schrieb:

    Nun sagst du es geht nicht so.

    Nein habe ich nie. Ich habe gesagt du sollst die Blöcke verkleinern und damit meine ich Blöckgrößen < 1 MB. Damit lässt sich IMHO wesentlich besser arbeiten.



  • @hero_99

    Hast Du die Routine aus meinem Beispiel in dem anderen Thread mal verwendet. Dort war der Lesepuffer sogar nur 1 KB groß und dynamisch erzeugt.

    Und 'ne dumme Frage: Verwendest Du den BCB6 unter Win ME? Ich weiß, dass Windows 98 vom BCB 6 nicht unterstützt wird. Kann mir nicht vorstellen, dass das mit ME anders sein soll...

    Grüße Joe_M.



  • zufaulzumeinloggen schrieb:

    Ich weiß, dass Windows 98 vom BCB 6 nicht unterstützt wird.

    Wie kommst du darauf?
    BCB6 System Requirements: Microsoft® Windows® 98, 2000 (SP2), and XP



  • Ich habe Borland 5 Enterprise.
    Die 6er war selbst bei Ebay zu teuer.

    Also den Buffer erstmal dynamisch erstellen,und dann den Wert wo er Leer läuft,die Schleife,vielleicht mal als Pointer benutzen.

    Mal sehen ob das was bringt.



  • @Jansen: Die Info habe ich seinerzeit von Borland EMEA erhalten. Als ich vor 2 Jahren auf den BCB 6 gewechselt habe, hatte ich ein paar Probleme unter Win 98. Diverse Dinge fehlten, u.a. der ClassExplorer. Borland EMEA hat mir empfohlen auf Win 2000 oder XP zu wechseln. Vielleicht hat sich das aber mit den Patches erledigt...



  • Schick doch mal Code rüber, der Ärger macht. Dann kann man auch konkret helfen.



  • Also ich habe den char array jetzt dynamisch erstellt.
    Der ist jetzt so gross wie die Datei ist,und wird wenn Datei zu gross ist,aufgeteilt.

    Somit ist jetzt das Problem mit der Variable anscheinend erledigt.

    PS. Der Puffer liegt immernoch bei 25MB was unter XP auch keinen Ärger macht.



  • Ich weiß nicht, was ein derart großer Puffer bringen soll...

    Nochmal am Beispiel einer 200 MB Datei:
    Einlesen mit 25 MB Puffergröße: 13-14 Sekunden
    Einlesen mit 1 MB Puffergröße: 11-12 Sekunden
    Einlesen mit 1 KB Puffergröße: 7-8 Sekunden.

    Die Datei befand sich jeweils bereits im Windows-Cache. Bei einem 25 MB Puffer verdoppelt sich die Lesezeit (fast)! Dies liegt an der Verwendung des Puffers innerhalb des Stacks, bei einem KB Größe.

    EDIT: Ich hatte Dir seinerzeit zur Verwendung eines Puffers geraten, weil Du jedes Byte einzeln eingelesen hast - und das ist definitiv die langsamste Methode.



  • Ok ich werde jetzt immer die Puffer klein halten(2kb),nur wo ich es mit nen 100 byte Puffer getestet habe,dauerte es länger wie alles aufeinmal.


Anmelden zum Antworten