Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TFileStream buffer [D5]


bns ©   (2005-06-24 15:59:00) 

А отчего размер буфера в TFileStream.WriteBuffer равен 64К? Корректно будет переписать метод и сделать его больше?

Спасибо.


begin...end   (2005-06-24 19:03:00) [1]

> ferr ©   (24.06.05 18:05) [8]

> Вы можете таскать по одному ящику или перевести все
> сразу.
> В одном случае больше памяти надо, а в другом больше
> времени.

Ну... чтобы перевозить ящики, много памяти не надо... :))

> bns   (24.06.05 18:31) [9]

> Я понял ее так, что увеличение размера буфера к
> катастрофическим последствиям привести не должно.

Увеличение размера в разумных пределах (несколько единиц раз) -- вероятно, не должно. Вообще говоря, это зависит от многих факторов. Например: из какого TStream будут копироваться данные методом CopyFrom? Из TMemoryStream небольшого размера, у которого данные уже находятся в памяти, или из TFileStream, который читает данные с диска? Не уверен, но думаю, что, несмотря на кэширование при дисковом чтении, изменение размера буфера окажет большее влияние на скорость копирования в случае TFileStream. Короче говоря, вряд ли здесь могут быть однозначные общие рекомендации. Можно попробовать, сравнить производительность (в конкретных условиях) и сделать выводы, учитывая также и то, что эти конкретные условия, в которых проводился тест, впоследствии могут и измениться.


ferr   (2005-06-24 18:49:00) [2]


> увеличение размера буфера к катастрофическим
> последствиям привести не должно.

Не должно. В данном случае увеличивать не надо.
ИМХО.


bns   (2005-06-24 18:31:00) [3]

Красивая аллегория. Я понял ее так, что увеличение размера буфера к катастрофическим последствиям привести не должно.


ferr   (2005-06-24 18:05:00) [4]


> Если я увеличу его, это приведет к каким-либо
> некорректностям в работе этого кода?

Вам надо ящики из одного места перенести в другое. Вы можете таскать по одному ящику или перевести все сразу.
В одном случае больше памяти надо, а в другом больше времени. Классическая ситуация. Ограничения накладывает система.


bns   (2005-06-24 17:39:00) [5]

>Чем не устраивает этот размер?
Хочу увеличить эффективность копирования.

>Это не 64К.
ОК, это меньше. Если я увеличу его, это приведет к каким-либо некорректностям в работе этого кода?

Спасибо.


begin...end   (2005-06-24 17:05:00) [6]

> bns   (24.06.05 16:54) [3]

> $F000

Это не 64К.

> WriteBuffer идет ниже и как раз не может записать
> больше этих самых $F000.

В реализации самогО WriteBuffer (а именно об этом шла речь в исходном вопросе) ограничений на размер буфера нет. А вот в CopyFrom действительно копирование происходит циклически с указанным размером буфера. Чем не устраивает этот размер?


ferr   (2005-06-24 17:04:00) [7]

Экономим память, не выделять же огромными кусками.
А WriteBuffer тут причём? Это CopyFrom...


Eraser   (2005-06-24 16:58:00) [8]

bns   (24.06.05 16:54) [3]
MaxBufSize = $F000;


Откуда выдрал кусок? )


bns   (2005-06-24 16:54:00) [9]

function TStream.CopyFrom(Source: TStream; Count: Longint): Longint;
const
 MaxBufSize = $F000;
begin

WriteBuffer идет ниже и как раз не может записать больше этих самых $F000.


ferr   (2005-06-24 16:38:00) [10]

код в студию


begin...end   (2005-06-24 16:26:00) [11]

А где в методе WriteBuffer фигурирует 64К?


Наверх

Титульная страница Поиск, карта сайта Написать письмо