Fehler 1450 bei fread()

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Servus,

bekomme auf einem Server 2003 SP2 diesen Fehler bei einer Routine, die auf anderen Servern und PCs einwandfrei funktioniert (kopieren von Dateien). Rechte passen, per Explorer geht es auch. Angemeldet als Admin.
PoolUsageMaximum auch schon in der Registrierung auf 60 gesetzt und Server neu gestartet.
:?:
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

In der XppError.txt sollte auch der Betriebssystemfehler (OS-CODE) stehen, also bitte mit dieser posten.

PS: ich habe meine ErrorSys.prg so angepasst, dass der alte Fehler nicht überschrieben wird und hinter OS-CODE die lesbare Erklärung folgt.
Alle Änderungen sind mit // HB markiert. Ich kann so nicht nur rekursive Fehler (z.B. wegen Fehler in der Fehlerroutine selbst) finden, sondern alle bis hier hin aufgetretenen.

Code: Alles auswählen

...
STATIC FUNCTION StandardEH( oError )
   LOCAL i, cMessage, aOptions, nOption, nSeverity
   LOCAL row, col
   LOCAL oDacSession, oSession
   Static nFehler_Stack := 0                    // HB

   if nFehler_Stack > 5
      quit
   endif
   ...

   nFehler_Stack++                              // HB

   /* Keine Standardkorrektur definiert: Erzeuge Fehlermeldung */
   cMessage := ErrorMessage( oError )
   ... an allen Aufrufen ... 
   ErrorLog( oError, 2, nFehler_Stack )     // HB

************************************************
STATIC PROCEDURE ErrorLog( oError, nStackStart, nFehler_Stack ) // HB
*
*  Erzeugt einen string mit den wichtigsten Informationen
*  aus dem Error-Object
************************************************
   LOCAL i:=0, bError := ErrorBlock( {|e| Break(e)} )
   LOCAL cErrorLog
   LOCAL cExtension:= "LOG"
   LOCAL lPrint, lConsole, cAlternate, lAlternate, lExtra
   /* Aktuelle Drucker-Einstellungen sichern und Drucker ausschalten */
   lPrint     := Set( _SET_PRINTER )
   lConsole   := Set( _SET_CONSOLE )
   cAlternate := Set( _SET_ALTFILE )
   lAlternate := Set( _SET_ALTERNATE )
   lExtra     := Set( _SET_EXTRA, .F. )

   SET PRINTER OFF
   SET CONSOLE ON

   IF SetAppWindow() == NIL ;
     .OR. .NOT. SetAppWindow():isDerivedFrom( RootCrt() )
      SET CONSOLE OFF
   ENDIF

   /* Fehler, beim öffnen der ALTERNATE Datei abfangen */
   DO WHILE .T.
      cErrorLog := EHS_ERRORLOG + "." + cExtension
      BEGIN SEQUENCE
        SET ALTERNATE TO (cErrorLog) Additive       // HB
        SET ALTERNATE ON
      RECOVER
        /*
         * ALTERNATE Datei konnte nicht geöffnet werden:
         * anderen Dateinamen verwenden.
         */
        cExtension := PadL(++i,3,"0")
        IF i > 999
           IF AppType() <> APPTYPE_PM
              TONE(660,5)
              ? EHS_LOG_OPEN_FAILED
              IF !Set( _SET_CONSOLE )
                  OutErr( CHR(10)+CHR(13) + EHS_LOG_OPEN_FAILED )
              ENDIF
           ELSE
              MsgBox( EHS_LOG_OPEN_FAILED )
           ENDIF
           ErrorLevel(1)
           QUIT
        ENDIF
        LOOP
      END SEQUENCE
      EXIT
   ENDDO

   ErrorBlock( bError )

   ?
   ?
   ? Replicate( "-", 78 )
   ? EHS_ERROR_LOG_OF +'"'+ appName(.T.) +'"'+ EHS_DATE, Date(), Time(), "***", ntrim(nFehler_Stack) // HB
   ? "Programm:  "+SetAppWindow():ProgName             // HB
   ? "Version:   "+SetAppWindow():ProgVersion+;        // HB
      "     vom: "+SetAppWindow():ProgFreiDatum        // HB
   ? "Rechner:   "+netname()                           // HB
   ? "Userinfo:  "+SetAppWindow():UserInfo             // HB
   * hier könnte weitere Infos stehen                  // HB
   ?
   ? EHS_XPP_VERSION , Version()+"."+Version(3)
   ? EHS_OS_VERSION  , Os()
   ? Replicate( "-", 78 )
   ? "oError:args         :"
   IF Valtype(oError:Args)=="A"
      AEval( oError:Args, ;
             {|x,y| Qout( Space(9),"-> VALTYPE:", y:=Valtype(x) )  , ;
                     IIf( y=="O", QQout( " CLASS:", x:className() ), ;
                                  QQout( " VALUE:", Var2Char(x) ) ) } )
   ELSE
      Qout( Space(10),"-> NIL" )
   ENDIF

   ? "oError:canDefault   :" , oError:canDefault
   ? "oError:canRetry     :" , oError:canRetry
   ? "oError:canSubstitute:" , oError:canSubstitute
   ? "oError:cargo        :" , oError:cargo
   ? "oError:description  :" , oError:description
   ? "oError:filename     :" , oError:filename
   ? "oError:genCode      :" , oError:genCode
   ? "oError:operation    :" , oError:operation
   ? "oError:osCode       :" , oError:osCode , " = ", DosErrorMessage(oError:osCode)
   ? "oError:severity     :" , oError:severity
   ? "oError:subCode      :" , oError:subCode
   ? "oError:subSystem    :" , oError:subSystem
   ? "oError:thread       :" , oError:thread
   ? "oError:tries        :" , oError:tries

   ? Replicate( "-", 78 )
   ? "CALLSTACK:"
   ? Replicate( "-", 78 )

   i := nStackStart
   DO WHILE ! Empty( ProcName(++i) )
      ? EHS_CALLED_FROM, Trim( ProcName(i) )   + "(" + ;
                 LTrim( Str( ProcLine(i) ) ) + ")"
   ENDDO
   ?

   SET ALTERNATE TO
   SET ALTERNATE OFF

   IF AppType() <> APPTYPE_PM
      TONE(660,5)
      ? EHS_LOG_WRITTEN_TO(cErrorLog)
      IF !Set( _SET_CONSOLE )
          OutErr( CHR(10)+CHR(13) + EHS_LOG_WRITTEN_TO(cErrorLog) )
      ENDIF
   ELSE
      MsgBox( EHS_LOG_WRITTEN_TO(cErrorLog)  )
   ENDIF

   /* Einstellungen wiederherstellen */
   Set( _SET_PRINTER,   lPrint)
   Set( _SET_CONSOLE,   lConsole)
   Set( _SET_ALTFILE,   cAlternate)
   Set( _SET_ALTERNATE, lAlternate)
   Set( _SET_EXTRA,     lExtra)

RETURN
 
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Servus Hubert,

verstehe ich nicht ganz, was Du meinst. Bei einem Fehler in fread wird die errorsys ja nicht angesprungen, das mache ich mittels ferror(). DosErrorMessage gibt für 1450 ein:
Nicht genügend Systemressourcen, um den angeforderten Dienst auszuführen
aus.

Meintest Du das?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

Hast Recht, kein Abbruch und ja genau das ist die lesbare Fehlermeldung. Ich kannte unter DOS die gewöhnlichen, aber 1450 ... ;-)

Die Meldung kann natürlich alles bedeuten ...
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Nächster Test beim Kunden: Ein

Code: Alles auswählen

copy file
funktioniert!
Kann sich das jemand erklären?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

versuche mal fopen() mit readonly flag, ODER es war ein temporäres Problem.

Am Anfang unserer Serverzeit hatten wir OS/2 Server und DOS Clients.
Die haben sich nur angemeldet wenn Sie ein Netzlaufwerk brauchten.
So war es kein Problem viel mehr DOS PC zu haben, als der Server gleichzeitig hätte verwalten können.

Irgendwann wurden die Clients auf Windows NT umgestellt.
Nun ging JEDER Rechner sofort beim hochfahren an den Server, die letzten konnten sich nicht mehr anmelden.
Bis bei den ersten 1 Stunde keine Aktivitäten waren, dann trennte der Server die Verbindung bis zum nächsten Zugriff.
Wenn der aber zu einer Zeit stattfand wenn alle Resourcen in Verwendung waren, kam es zu "Lesefehler in Overlaydatei"
etc. Im normalen Testbetrieb in der Testumgebung kam sowas nie vor.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fehler 1450 bei fread()

Beitrag von georg »

Hallo, Werner -


vielleicht helfen Dir die Ansätze in diesem KB Artikeln von Microsoft weiter:

http://support.microsoft.com/kb/304101

Es betrifft zwar eher Backup-Programme, aber die Auswirkungen scheinen vergleichbar zu sein. Insbesondere die Abschnitte Cause und Resolution erscheinen mir für Dich lesenswert.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

Werner_Bayern hat geschrieben:Nächster Test beim Kunden: Ein

Code: Alles auswählen

copy file
funktioniert!
Kann sich das jemand erklären?
Ich nutze zum Kopieren von Dateien immer diesen ;-)

nun zum Problem, wie groß ist denn der Buffer der auf einmal eingelesen werden soll ?

Ich habe mit Memoread auf meinem Arbeitsrechner schon 500 MB Dateien eingelesen ( 1/4 des Arbeitsspeichers),
bei Citrix Programmen hat man aber weniger Resourcen je Sitzung zur Verfügung (RAM, Festplatte und GDI-Handles),
eventuell gibt es solche Einschränkungen auch bei anderen Tasks auf dem Server.
Der muss die Resourcen ja mit anderen Teilen.
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

brandelh hat geschrieben:versuche mal fopen() mit readonly flag, ODER es war ein temporäres Problem.
Mach ich sowieso, alles andere wäre ja ...

Code: Alles auswählen

if (nQuelle := fopen(cQuelle, 0)) == -1 
Nein, nix temporär, auch am nächsten Tag nach keiner Vollmondnacht gings nicht.

Zu Deinen anderen Ausführungen: Ich habs direkt auf dem Server getestet, geht um eine Update-Routine der DBFs. Wie geschrieben, mit dem Explorer kann ich die umkopieren - sind 1000%ig nicht in Benutzung - mit copy file gehts auch, mit meiner eigenen Kopierfunktion - die ja viel mehr abfangen kann (_copyfile hat ja nicht mal einen Rückgabewert), gehts nicht. Läuft aber schon seit 24 Jahren unter Clipper und seit 2 Jahren unter Xbase (entsprechend angepasst).

Danke Dir.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Danke, genau den kannte ich schon und hab auch den einen Registrierungsschlüssel angepasst, obwohls eigentlich nicht sein kann, das passiert bei mir schon bei der ersten DBF, die grad mal ein paar kB hat.
Als Puffer reserviere ich:

Code: Alles auswählen

nPuffer := int(memory(MEM_PROC_AVAIL) * MAXIMUM * 1024)
wobei MAXIMUM normal .3 hat, aber auch mit .2 gehts nicht. Der Taskmanager zeigt bei dem Vorgang ziemlich genau die exacte Speicherverwendung an, also auch nicht zuviel.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

brandelh hat geschrieben:Ich nutze zum Kopieren von Dateien immer diesen ;-)
Sehr unsicher, kein Rückgabewert, kein Balken möglich, kein Vergleich etc. Deshalb hab ich mir das mal selber mit den Low-Level Funktionen geschrieben, dort hab ich ja eine gute Kontrolle, was passiert und wo wann welcher Fehler auftreten kann.

Nein, bin direkt auf dem Server gewesen, nicht mittels RDP. Den Rest hab ich vorhin schon geschrieben, hat sich überschnitten.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Fehler 1450 bei fread()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:mit dem Explorer kann ich die umkopieren
na dann nimm doch die ShFile API welche der Explorer benutzt ;)

es gibt die Version von Phil Ide mit BAP
foldbrow.zip
Phil Ide / B.I. Kaarigstad ShFile API
need BAP
(19.92 KiB) 197-mal heruntergeladen
oder von Pablo mit ot4xb
SHFILEOPERATION.zip
ShFile API with ot4xb
(2.33 KiB) 210-mal heruntergeladen
Werner_Bayern hat geschrieben:Läuft aber schon seit 24 Jahren unter Clipper und seit 2 Jahren unter Xbase (entsprechend angepasst).
wie war das noch : ... bis hier ging es gut ...

Frage : was für ein OS() hat der Client / Workstation ? Win 7 ?

du sprichst von um-kopieren und FREAD() ... ist das ein "read after write" ? ... hört sich nach "Cache" an ...
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Servus Jimmy,

danke.
Frage : was für ein OS() hat der Client / Workstation ? Win 7 ?
du sprichst von um-kopieren und FREAD() ... ist das ein "read after write" ? ... hört sich nach "Cache" an ...
OS steht in meiner Eröffnungsnachricht, Server 2003 32bit, SP2.
Cache? Nein, ich kann ja nichtmal 1 Byte lesen.
Habs jetzt mit frename() gelöst, da kann ich wenigstens ferror() abfragen und geht auch 100000x schneller, wenns dieselbe Partition ist. War mir bisher nie bewußt, dass mittels frename auch verschoben werden kann.
Bei meinem Problem hier hab ich bisher kopiert und das Original dann gelöscht. Reines kopieren geht bei diesem Kunden nur mittels copy file, mit allen beschriebenen Nachteilen.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Jetzt schon wieder der Fehler, bei folgender Routine:

Code: Alles auswählen

   if (nZiel := fcreate(cDatei, 0)) == -1
      fehler("Fehler beim Anlegen neuer Datei: " + cDatei + LF + dosfehl(ferror()))
      return NIL
   endif
   if .not. (nZeichen := fwrite(nZiel, cZeichen, nPuffer)) == nPuffer
      fehler("Fehler beim Schreiben in Datei " + cDatei + LF + dosfehl(ferror()))
      exit
   endif
cZeichen sind 42 MB, nPuffer = len(cZeichen). Lokal auf die Festplatte gehts ohne Probleme, auf ein Netzlaufwerk jedoch nicht, da kommt wieder der nicht genügend systemressourcen um den angeforderten dienst auszuführen / 1450???
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Fehler 1450 bei fread()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:Lokal auf die Festplatte gehts ohne Probleme, auf ein Netzlaufwerk jedoch nicht, da kommt wieder der nicht genügend systemressourcen um den angeforderten dienst auszuführen / 1450???
meinst du mit Netzlaufwerk das du es von einer Workstation ansprichst ?

wenn du auf dem Server eine Application startest läuft die nicht unter den selben Bedingungen wie auf einer Workstation.

bestes Beispiel : W2k3 und XP PRO 64bit ... selber Kernel ... selbes Service Pack
aber beim Server werden Hintergrunddienste/Cache statt Programme/Programme bevorzugt.
dito ist das "Kontigent", wenn man "auf" dem Server arbeitet, anders begrenzt ( Limit ) also Benutzer/Gruppen überprüfen.

btw. wenn du auf dem Server die Xbase++ Application startest wie viel CPU % wird angezeigt ?
passiert was wenn du die Priorität, per Taskmanager -> Prozesse -> rechte Maus -> Priorität, erhöhst ?
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:meinst du mit Netzlaufwerk das du es von einer Workstation ansprichst ?
yep

Immer vom Client aus gesehen. Deine übrigen Ausführungen / Fragen erledigen sich damit?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

einige Tests später...

Vergrößere ich auf dem Client die Auslagerungsdatei, kommt der Fehler auf dem Netzlaufwerk wesentlich später...
Verringere ich die 45 MB-Blöcke in 14 MB-Blöcke, läuft es!!!

Zuerst dachte ich, das hat was mit dem Treiber / Einstellungen der Netzwerkkarte zu tun, aber dass es mit der Vergrößerung der Auslagerungsdatei zusammenhängt. :?: Obwohl genügend RAM vorhanden ist: 4 GB=> Vista zeigt 4 GB (Arbeitsplatz) und 2,813 GB nutzbar an.
memory(MEM_VIRT_AVAIL) = 1,22 GB
memory(MEM_VIRT_TOTAL) = 3,98 GB
memory(MEM_RAM_AVAIL) = 1,63 GB
memory(MEM_RAM_TOTAL) = 2.00 GB (!!)
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Fehler 1450 bei fread()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:Vergrößere ich auf dem Client die Auslagerungsdatei, kommt der Fehler auf dem Netzlaufwerk wesentlich später...
Verringere ich die 45 MB-Blöcke in 14 MB-Blöcke, läuft es!!!
Frage : sprechen wir "nur" von FREAD() oder wird gleich "verarbeitet" ?

ich sehe kein Problem eine 2GB Datei zu öffnen und zu "lesen" aber wenn du es "verarbeitest" z.b. Array benötigst du ja auch die entsprechende Grösse.
Obwohl genügend RAM vorhanden ist: 4 GB
für 32bit ... ;)
aber auch unter x64 mit 8GB bekomme ich bei solchen "extremen" Fällen Probleme weil ich die Swap-Disk ( RAM x 1.5 ) abgeschaltet habe bei Verwendung einer SSD.

btw. was ist der Server 32/64bit und wie viel RAM hat er ? im normal Fall ist der "Userspace" nur 2GB ( siehe /USERVA )
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

Servus Jimmy,

nein, siehe mein Quelltext oben, es wird einfach nur eine Zeichenfolge x Mal geschrieben. Ist ein einfacher Schreib- und Lesetest.
Es knallt entweder schon beim ersten Schreibversuch, die Datei kann erzeugt werden, aber der Schreibvorgang wird wg. zuwenig Ressourcen abgebrochen. Das kann nur ein lokales Problem sein.
Arbeitsspeicher für das Xbase++ - Programm ist nicht das Problem, sonst würde es ja lokal nicht funktionieren. Es dürfte auch egal sein, was der Server Arbeitsspeicher in diesem Fall hat, weil ja einfach nur eine Datei über das IP-Protokoll geschrieben wird. Da reichen 512 kB :wink:
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:aber auch unter x64 mit 8GB bekomme ich bei solchen "extremen" Fällen Probleme weil ich die Swap-Disk ( RAM x 1.5 ) abgeschaltet habe bei Verwendung einer SSD.
Gehört zwar nicht unbedingt hier her, aber ich habe mir auch eine SSD eingebaut und zuerst das SwapFile abgeschaltet. Da meckert Windows (Vista 32 SP2 mit "4" GB) sehr schnell, dass zuwenig Arbeitsspeicher da sei und ich doch einige Anwendungen beenden soll.
Deshalb hab ich mir wieder ein SwapFile angelegt und zwar bewusst auf der SSD - obwohl ich noch eine SATA mit drin habe - weil
1. sehr schnell
2. Vista und wohl jede Windows-Version generell das braucht
3. von MS sogar als unbedenklich auf SSD empfohlen wird (die Lebensdauer wird dadurch nicht wesentlich bei modernen SSDs mit aktueller Firmware beeinträchtigt)
4. sonst eben ein flüssiges und umfassendes Arbeiten nicht möglich ist
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Fehler 1450 bei fread()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:Es knallt entweder schon beim ersten Schreibversuch, die Datei kann erzeugt werden, aber der Schreibvorgang wird wg. zuwenig Ressourcen abgebrochen.
ok verstanden ... also Fcreate()/ FWrite()
... aber was hat das jetzt mit dem Fread() (Fehler 1450) zu tun ?
Werner_Bayern hat geschrieben:weil ja einfach nur eine Datei über das IP-Protokoll geschrieben wird. Da reichen 512 kB :wink:
und das ist das was mich wundert wenn du mit MB, statt KB, ankommst.
"was" willst du "wie" über das "IP-Protokoll" machen und warum diese MB Grösse ?

p.s. das Fwrite() Demo geht von BUFFER_SIZE 2^16 -> 64Kb aus ...
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2122
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Fehler 1450 bei fread()

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:... aber was hat das jetzt mit dem Fread() (Fehler 1450) zu tun ?
und das ist das was mich wundert wenn du mit MB, statt KB, ankommst.
"was" willst du "wie" über das "IP-Protokoll" machen und warum diese MB Grösse ?

p.s. das Fwrite() Demo geht von BUFFER_SIZE 2^16 -> 64Kb aus ...
Nichts mit fread, das war der ursprüngliche Thread, betrifft aber immer noch die gleiche Funktion bei mir. Die ursprüngliche Problematik konnte ja leider nicht geklärt werden, ich bin sie nur umgangen mit dem wenig für mich befriedigenden Befehl copy file.

Mit den 512 kB inkl. Wink wollte ich sagen, dass es auf den Arbeitsspeicherausbau da am Server doch nicht ankommt, das IP-Protokoll (mit dem ich selbst nichts direkt machen will) schiebt das Paket für Paket auf den Server, dem ist es "egal", ob ich 1 MB oder 500 MB oder 2 GB rüberschiebe. Das hat nicht viel (manches schon, ich weiß) mit dem Arbeitsspeicher zu tun.

Was meinst Du mit Deinem p.s.?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Fehler 1450 bei fread()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:... ich bin sie nur umgangen mit dem wenig für mich befriedigenden Befehl copy file.
was immer noch das schnellste ist !

mit dem "p.s." wollte ich nur sagen das es ungewöhnlich ist Fread/Fwrite mit einem "MB Buffer" zu verwenden da der default Windows Wert 32kb ist.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

Ich habe bei vielen Tests die besten Ergebnisse mit 4 KByte Blöcken ( 4096 Byte) erzielt.
Ab und zu war zwar ein 32 KByte Block schneller, aber auf manchen Zielgeräten dann katastrophal schlechter.
Größere Blöcke führen beim Lesen oder Schreiben zu Wartezeiten und sehr große Blöcke wirbeln das Speichermanagement durcheinander.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fehler 1450 bei fread()

Beitrag von brandelh »

Hier z.B. ein Programm, dass die 2GB-Grenze prüfen sollte (solange man FSeek() weg läßt, kann man größere Dateien lesen und schreiben.):

Code: Alles auswählen

#include "fileio.ch"
procedure main
   local cFileName := "verybig.txt"
   local nSizeExPl := 4154687701
   local cSizeExPl := "  4.154.687.701"
   local nQuelle, nZiel, nBytes, nSize, cBuffer, nReadByte, x, nReadBytes, nCopyBytes

   cls

   set alternate to TestBigLog.txt
   set alternate on

   nBytes  := 4096
   cBuffer := space(nBytes)

   ?
   ? "Test der low level file Funktionen"
   ? cFileName
   ? "Größe laut Explorer: ", transform(nSizeExPl,"999,999,999,999"), " (numerisch)"
   ? "Größe laut Explorer: ", cSizeExPl, " (string)"
   ? "Größe laut FSize(c): ", transform(FSize(cFileName),"999,999,999,999"), " (Dateiname)"
   nQuelle := FOpen( cFileName , FO_READ )
   nSize   := FSeek( nQuelle, 0 , FS_END ) // gehe zum Ende
   ? "Größe laut FSEEK():  ", transform(nSize, "999,999,999,999"), " (numerisch)"
   ? "Größe laut FSize(h): ", transform(FSize(nQuelle),"999,999,999,999"), " (mit filehandle)"
   nSize   := FSize(nQuelle)
   ? "Größe laut FSize(n): ", transform(nSize, "999,999,999,999"), " (über Variable)"
   ? "Wieder am Anfang:    ", FSeek( nQuelle, 0 , FS_SET ) // gehe zum Anfang

   nBytes  := 4096
   cBuffer := space(nBytes)

   nZiel   := FCreate( "NeueDatei.TXT", FC_NORMAL )

   IF nZiel == -1
      ? "Fehler beim Erzeugen der Datei:", FError()
   ELSE
      x          := 1
      nReadBytes := 0
      nCopyBytes := 0
      do while nBytes > 0
         if x > 100
            @ 1, 40 say "gelesen: "+transform(nReadBytes, "999,999,999,999")
            @ 2, 40 say "kopiert: "+transform(nCopyBytes, "999,999,999,999")
            x := 1
         else
            x++
         endif
         nBytes := FRead(nQuelle, @cBuffer, len(cBuffer))
         nReadBytes += nBytes
         if FError() > 0
            ? "LESEN - FError() = ",FError()
            exit
         endif
         nBytes := FWrite(nZiel, @cBuffer, nBytes)
         nCopyBytes += nBytes
         if FError() > 0
            ? "SCHREIBEN - FError() = ",FError()
            exit
         endif
      enddo
   ENDIF

   FClose( nQuelle )
   FClose( nZiel )

   @ 1, 40 say "gelesen: "+transform(nReadBytes, "999,999,999,999")
   @ 2, 40 say "kopiert: "+transform(nCopyBytes, "999,999,999,999")

   ? "Gelesen:             ",transform(nReadBytes, "999,999,999,999")
   ? "Kopiert:             ",transform(nCopyBytes, "999,999,999,999")

   set alternate off
   set alternate to

   wait
return
Gruß
Hubert
Antworten