Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

CreateNamedPipe. Использование OutBufferSize и InBufferSize.   Найти похожие ветки 

 
Riply ©   (2007-04-17 21:33) [0]

Здравствуйте !
Допустим, Pipe-ым клиенту и серверу надо обменяться данными размера cbDataSize >> MAXWORD.
Попробовала сделать так:
При создании сервера ( CreateNamedPipe ) установила OutBufferSize и InBufferSize равными 1024.
Данные отправляю ( WriteFile ) с сервера блоками по ((MAXWORD + 1) shr 1) байт,
а с клиента сразу все cbDataSize.
Считываю (и там и там) блоками по InBufferSize байт.
К моему удивлению все работает. Но меня не покидает ощущение, что я поступаю неправильно.
Help"ый Remarks к этим параметрам зачитала до дыр,
но так и не смогла осознать их истинный смысл. :(
Объясните, пожалуйста, "на пальцах" что хотят донести до нас
в "Remarks section" к CreateNamedPipe насчет этих "консультативных" параметров ?


 
Eraser ©   (2007-04-17 22:11) [1]

> [0] Riply ©   (17.04.07 21:33)

Все ж в мсдн написано ;)
Whenever a pipe write operation occurs, the system first tries to charge the memory against the pipe write quota. If the remaining pipe write quota is enough to fulfill the request, the write operation completes immediately. If the remaining pipe write quota is too small to fulfill the request, the system will try to expand the buffers to accommodate the data using nonpaged pool reserved for the process. The write operation will block until the data is read from the pipe so that the additional buffer quota can be released. Therefore, if your specified buffer size is too small, the system will grow the buffer as needed, but the downside is that the operation will block. If the operation is overlapped, a system thread is blocked; otherwise, the application thread is blocked.

Т.е. если длины буффера не достаточно, система самы выделит недостающую память, но на это может потребоваться время, т.е. для высокопроизводительных приложений желательно на буффере не экономить )


 
Leonid Troyanovsky ©   (2007-04-17 23:07) [2]


> Riply ©   (17.04.07 21:33)  

> При создании сервера ( CreateNamedPipe ) установила OutBufferSize
> и InBufferSize равными 1024.

А почему б не 4096 или, скажем, $10000?

--
Regards, LVT.


 
Riply ©   (2007-04-17 23:33) [3]

> [1] Eraser © (17.04.07 22:11)
Спасибо.
Там есть еще:
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.
Что подразумевается под "system default, minimum or maximum" и как узнать,
что "process will not run out of nonpaged pool" ?
Если я правильно понимаю, много просить - черевато.
Т.е. ,"желательно на буффере не экономить" - палка о двух концах.
Но, с другой стороны запись в Pipe со стороны сервера ограничена 65535,
а это, вряд "слишком много". Запуталась :(


 
Riply ©   (2007-04-17 23:40) [4]

[2] Leonid Troyanovsky ©   (17.04.07 23:07)
>А почему б не 4096 или, скажем, $10000?
Потому что экспериментирую и пытаюсь понять как надо.
Опять же, если я правильно их поняла,
то "буфер должен соответствовать размеру наиболее часто посылаемого запроса",
а у меня чаще всего будет примерно 1024


 
Eraser ©   (2007-04-18 00:02) [5]

> [3] Riply ©   (17.04.07 23:33)


> Что подразумевается под "system default, minimum or maximum"
> и как узнать

вот это не знаю, скорее всего по-умолчанию размер буффера кратен или равен размеру страницы.

> Если я правильно понимаю, много просить - черевато.

угу, десятки мегабайт просить не стОит, imho.

> Но, с другой стороны запись в Pipe со стороны сервера ограничена
> 65535,
> а это, вряд "слишком много".

да, это мелочи.

но всё таки думаю, что ключевая фраза здесь
The input and output buffer sizes are advisory.
не удивлюсь, что работать будет одинаково, не звисимо от того, указывать размер буффера или нет, хотя тут практика - критерий истины.


 
Riply ©   (2007-04-18 00:22) [6]

> [5] Eraser ©   (18.04.07 00:02)
Еще раз спасибо.
>но всё таки думаю, что ключевая фраза здесь
>The input and output buffer sizes are advisory.
>не удивлюсь, что работать будет одинаково, не звисимо от того, указывать размер буффера или нет, хотя тут >практика - критерий истины.
Ну что ж. Буду, пока, брать размеры с потолка, хотя мне это и не очень нравится.
Ведь не зря же они ввели эти параметры...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
4-1165861561
Ihtiandr
2006-12-11 21:26
2007.05.06
Функция, изменяющая расскладку клавиатуры


15-1175977434
Danilka
2007-04-08 00:23
2007.05.06
Есть ли Бог на Марсе?


2-1176724292
XTD
2007-04-16 15:51
2007.05.06
Программа для Linux’a


10-1132575802
George_Debug
2005-11-21 15:23
2007.05.06
ADO+Excel


2-1176616630
GeLLeR
2007-04-15 09:57
2007.05.06
Focus





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский