![]() |
Maximale Buffergröße bei TransactNamedPipe?
Hallo!
Ich arbeite gerade mit Pipes und stehe nun vor dem Problem, das die Routine 'TransactNamedPipe' mit einer Buffergröße von 40.000.000 aufgerufen wird. Ich gebs ja zu, vielleicht ein wenig groß. Nun meckert die Routine und gibt ein 'Invalid Argument' zurück. Der gleiche Aufruf mit einer Puffergröße von 1000 funktioniert. Gibt es eine maximale Größe für Puffer oder Adressbereiche, die man an eine Windows-Routine übergeben kann? Es scheint fast so, aber ich habe darüber Nichts finden können. Weiss jemand mehr darüber? Ach ja: Natürlich kann ich die 40 MByte fragmentieren, aber hier gehts es mir ausnahmesweise ums Prinzip. |
Re: Maximale Buffergröße bei TransactNamedPipe?
Hallo alzaimar,
da der Speicher für deine named pipes aus dem nonpaged memory pool rekrutiert wird, solltest du vorsichtig mit zu großen Werten sein: Microsoft : PSDK 2003 : CreateNamedPipe() : Remarks ... Every time a named pipe is created, the system creates the inbound and/or outbound buffers using nonpaged pool, which is the physical memory used by the kernel. ... The input and output buffer sizes are advisory. The actual buffer size reserved for each end of the named pipe is either the system default, the system minimum or maximum, or the specified size rounded up to the next allocation boundary. The buffer size specified should be small enough that your process will not run out of nonpaged pool, but large enough to accommodate typical requests. Der system default sollte 64KB sein, wenn ich mich recht erinnere. Die Unter- und Obergrenzen sind mir leider nicht bekannt. Unter OS/2 sollte man die buffer size unbedingt als Vielfaches von 1024 Byte wählen, damit das System nicht ausgebremst wird. Die Systemwerte sollten sich aber mit wenig Aufwand mittels GetNamedPipeInfo() ermitteln lassen. Gute Nacht |
Re: Maximale Buffergröße bei TransactNamedPipe?
Hallo marabu,
ich habe die entsprechende Passage in der SDK gelesen, aber -vermutlich wegen beginnender Senilität- keinerlei Begrenzungen ablesen können. Danke für die Anwort. Meine Resultate werde ich dann hier posten. |
Re: Maximale Buffergröße bei TransactNamedPipe?
Ein kurzer Versuch hat gezeigt, das die maximale Puffergröße 32k beträgt. Mit Overlapped IO kommt man dann auf Transferraten von 60MB/sec, was eigentlich ausreicht.
|
Re: Maximale Buffergröße bei TransactNamedPipe?
In der msdn unter WriteFile gefunden
Zitat:
|
Re: Maximale Buffergröße bei TransactNamedPipe?
Hi Heffalump, ich sollte vielleicht doch LESEN, was ich mir in der OH raussuche :oops: . Dessenungeachtet bekomme ich eh nur max 32k hin.
Danke für den Tipp! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz