Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2015-01-13 14:26:49 ЛС | профиль | цитата
Согласен, что в том числе, для работы нескольких процессов с одними данными.
Ну, а скорость за счет чего достигается? Неужели при работе с обычными файлами система пишет/читает с диска медленнее, чем пишет/читает в том же File mapping? Нет, с диском она работает на той же скорости. Но с той частью, которая в данный момент расположена в памяти - естественно, гораздо быстрее. Данные, ожидающие записи на диск, записываются позже по мере необходимости.
Вся эта кухня скрыта и для пользователя всё выглядит, как работа с памятью. Но, тем не менее, MapViewOfFile грузит необходимую часть файла в память, UnmapViewOfFile (а также FlushViewOfFile и FlushFileBuffers) сбрасывают изменения на диск. И чем это отличается от Buffered File Stream (если не стоит задача расшарить между процессами)?

И при чем тут большие файлы...
------------ Дoбавленo в 14.26:
Вот чисто из любопытства. Есть схемка

Add(MainForm,2953706,21,105)
{
Height=228
Caption="File copy test"
Position=1
}
Add(Label,1543935,21,168)
{
Left=10
Top=20
Width=87
Height=17
Caption="Исходный файл:"
}
Add(Edit,1702965,217,168)
{
Left=100
Top=15
Width=200
Text=""
}
Add(Button,15719336,105,168)
{
Left=315
Top=15
Width=65
Caption="Обзор"
link(onClick,1096610:doExecute,[])
}
Add(ODialog,1096610,161,168)
{
Filter="Все файлы (*.*)|*.*"
Title="Выбор файла"
FileName=""
Point(FileName)
link(onExecute,1702965:doText,[])
link(FileName,2281709:getVar,[])
}
Add(SDialog,15836243,161,287)
{
Filter="Все файлы (*.*)|*.*"
Title="Сохранение"
FileName=""
Point(FileName)
link(onExecute,9413449:doText,[])
link(FileName,8759727:getVar,[])
}
Add(LineBreakEx,2281709,161,133)
{
Caption="src"
Type=2
}
Add(LineBreakEx,5137826,217,217)
{
Caption="src"
Type=3
link(_Data,1702965:Text,[])
}
Add(LineBreakEx,8759727,161,252)
{
Caption="dst"
Type=2
}
Add(LineBreakEx,4250756,217,336)
{
Caption="dst"
Type=3
link(_Data,9413449:Text,[])
}
Add(Label,9405329,21,287)
{
Left=10
Top=65
Width=86
Height=17
Caption="Конечный файл:"
}
Add(Edit,9413449,217,287)
{
Left=100
Top=60
Width=200
Text=""
}
Add(Button,3039266,98,287)
{
Left=315
Top=60
Width=65
Caption="Обзор"
link(onClick,15836243:doExecute,[])
}
Add(Button,1685428,56,546)
{
Left=105
Top=115
Width=180
Height=50
Caption="Копировать!"
link(onClick,11999779:doStart,[])
}
Add(LineBreakEx,16559159,343,399)
{
Caption="src"
Type=2
}
Add(LineBreakEx,14989227,434,399)
{
Caption="dst"
Type=2
}
Add(Message,4414827,616,476)
{
Caption="Результат"
}
Add(FormatStr,2501378,560,476)
{
DataCount=1
Mask="Копирование завершено!
Скопировано %1 байт."
link(onFString,4414827:doMessage,[])
}
Add(TimeCounter,11999779,161,546)
{
link(onStart,5224921:doEvent1,[(209,552)(209,454)])
link(onStop,15347917:doStrCat,[])
}
Add(LineBreak,14808041,105,553)
{
Caption="stop"
link(Out,11999779:doStop,[])
Primary=[15464532,455,-105]
}
Add(Hub,622976,518,448)
{
link(onEvent1,15464532:In,[])
link(onEvent2,2501378:doString,[(546,461)(546,482)])
}
Add(Label,2082802,287,553)
{
Left=175
Top=175
Width=40
Height=17
Caption="Время:"
}
Add(StrCat,15347917,224,553)
{
Str1="Время: "
link(onStrCat,2082802:doText,[])
}
Add(Hub,5224921,245,448)
{
}
Add(SharedStream,12902902,385,455)
{
}
Замутите мне копирование файла, размером так около 3Гб, с помощью SharedStream, чтобы можно было удостовериться в скорости.
карма: 26

0