AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Maximale Buffergröße bei TransactNamedPipe?
Thema durchsuchen
Ansicht
Themen-Optionen

Maximale Buffergröße bei TransactNamedPipe?

Ein Thema von alzaimar · begonnen am 21. Nov 2006 · letzter Beitrag vom 23. Nov 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Maximale Buffergröße bei TransactNamedPipe?

  Alt 21. Nov 2006, 19:12
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Maximale Buffergröße bei TransactNamedPipe?

  Alt 21. Nov 2006, 22:09
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Maximale Buffergröße bei TransactNamedPipe?

  Alt 21. Nov 2006, 22:31
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Maximale Buffergröße bei TransactNamedPipe?

  Alt 22. Nov 2006, 17:58
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Maximale Buffergröße bei TransactNamedPipe?

  Alt 23. Nov 2006, 12:27
In der msdn unter WriteFile gefunden
Zitat:
nNumberOfBytesToWrite
[in] Number of bytes to be written to the file.
A value of zero specifies a null write operation. The behavior of a null write operation depends on the underlying file system. To truncate or extend a file, use the SetEndOfFile function.

Named pipe write operations across a network are limited to 65,535 bytes.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Maximale Buffergröße bei TransactNamedPipe?

  Alt 23. Nov 2006, 14:18
Hi Heffalump, ich sollte vielleicht doch LESEN, was ich mir in der OH raussuche . Dessenungeachtet bekomme ich eh nur max 32k hin.

Danke für den Tipp!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz