Форум: "Начинающим";
Текущий архив: 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.044 c