Fehler 1450 bei fread()
Moderator: Moderatoren
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Fehler 1450 bei fread()
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.
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!>
Werner
<when the music is over, turn off the lights!>
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
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.
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
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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:
Meintest Du das?
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:
aus.Nicht genügend Systemressourcen, um den angeforderten Dienst auszuführen
Meintest Du das?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
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 ...
Die Meldung kann natürlich alles bedeuten ...
Gruß
Hubert
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
Nächster Test beim Kunden: Ein
funktioniert!
Kann sich das jemand erklären?
Code: Alles auswählen
copy file
Kann sich das jemand erklären?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
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.
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
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 99 Mal
- Danksagung erhalten: 13 Mal
Re: Fehler 1450 bei fread()
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
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.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
Ich nutze zum Kopieren von Dateien immer diesenWerner_Bayern hat geschrieben:Nächster Test beim Kunden: Einfunktioniert!Code: Alles auswählen
copy file
Kann sich das jemand erklären?
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
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
Mach ich sowieso, alles andere wäre ja ...brandelh hat geschrieben:versuche mal fopen() mit readonly flag, ODER es war ein temporäres Problem.
Code: Alles auswählen
if (nQuelle := fopen(cQuelle, 0)) == -1
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!>
Werner
<when the music is over, turn off the lights!>
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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.georg hat geschrieben:http://support.microsoft.com/kb/304101
Als Puffer reserviere ich:
Code: Alles auswählen
nPuffer := int(memory(MEM_PROC_AVAIL) * MAXIMUM * 1024)
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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.brandelh hat geschrieben:Ich nutze zum Kopieren von Dateien immer diesen
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!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fehler 1450 bei fread()
na dann nimm doch die ShFile API welche der Explorer benutztWerner_Bayern hat geschrieben:mit dem Explorer kann ich die umkopieren
es gibt die Version von Phil Ide mit BAP oder von Pablo mit ot4xb
wie war das noch : ... bis hier ging es gut ...Werner_Bayern hat geschrieben:Läuft aber schon seit 24 Jahren unter Clipper und seit 2 Jahren unter Xbase (entsprechend angepasst).
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
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
Servus Jimmy,
danke.
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.
danke.
OS steht in meiner Eröffnungsnachricht, Server 2003 32bit, SP2.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 ...
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!>
Werner
<when the music is over, turn off the lights!>
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
Jetzt schon wieder der Fehler, bei folgender Routine:
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???
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
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fehler 1450 bei fread()
meinst du mit Netzlaufwerk das du es von einer Workstation ansprichst ?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???
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
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
yepAUGE_OHR hat geschrieben:meinst du mit Netzlaufwerk das du es von einer Workstation ansprichst ?
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!>
Werner
<when the music is over, turn off the lights!>
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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 (!!)
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!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fehler 1450 bei fread()
Frage : sprechen wir "nur" von FREAD() oder wird gleich "verarbeitet" ?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!!!
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.
für 32bit ...Obwohl genügend RAM vorhanden ist: 4 GB
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
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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
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
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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.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.
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!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fehler 1450 bei fread()
ok verstanden ... also Fcreate()/ FWrite()Werner_Bayern hat geschrieben:Es knallt entweder schon beim ersten Schreibversuch, die Datei kann erzeugt werden, aber der Schreibvorgang wird wg. zuwenig Ressourcen abgebrochen.
... 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.Werner_Bayern hat geschrieben:weil ja einfach nur eine Datei über das IP-Protokoll geschrieben wird. Da reichen 512 kB
"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
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2129
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Fehler 1450 bei fread()
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.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 ...
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!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fehler 1450 bei fread()
was immer noch das schnellste ist !Werner_Bayern hat geschrieben:... ich bin sie nur umgangen mit dem wenig für mich befriedigenden Befehl copy file.
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
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
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.
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Fehler 1450 bei fread()
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
Hubert