здесь файл целиком в памяти, а если слишком большой, то ещё и на диске второй экземпляр - нетрудно проверить, открыв какой-либо громадный файл, контролируя объём памяти через диспетчер
При открытии громадного файла (~80 метров) вариант с IC зависает
------------ Дoбавленo в 00.21:
а при меньшем объеме ( 1,2 метра) в диспетчере задач объем памяти примерно одинаковый.
Add(MainForm,10824360,182,63)
{
Width=607
}
Add(FileStream,12721924,476,182)
{
link(onLoad,5834388:doRepeat,[(520,188)(520,223)(469,223)(469,237)])
link(FileName,1357405:Var3,[(482,135)])
}
Add(DataToFile,1223787,476,273)
{
Type=7
link(onGet,13089276:doEvent1,[])
link(Stream,12721924:Stream,[])
}
Add(Repeat,5834388,483,231)
{
Check=1
link(onRepeat,1223787:doGet,[(523,237)(523,268)(464,268)(464,286)])
link(Op1,12721924:Size,[])
link(Op2,12721924:Position,[])
}
Add(DropFile,5033232,273,56)
{
link(onDropFile,8663227:doValue,[])
}
Add(Hub,13089276,546,273)
{
link(onEvent1,6095622:doProcessMessages,[(588,279)(588,223)])
link(onEvent2,8493684:doNext,[])
}
Add(Application,6095622,616,217)
{
}
Add(Counter,8493684,658,280)
{
Max=1000000
link(onNext,7428892:doText,[])
}
Add(Label,7428892,714,280)
{
Left=135
Top=175
}
Add(InlineCode,8651700,406,378)
{
WorkPoints=#6:doRead|
EventPoints=#6:onRead|
VarPoints=#4:tStr|
DataPoints=#8:FileName|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|15: str:string;|9: public|13: FileName,|22: onRead: THI_Event;|49: Procedure doRead(var _Data:TData;Index:Word);|47: Procedure tStr(var _Data:TData;Index:Word);|5: end;|0:|14:implementation|0:|29:Procedure THiAsmClass.doRead;|3:var|14: F: TextFile;|13: fn: string;|5:begin|36: fn := ReadString(_Data, FileName);|34: if not FileExists(fn) then exit;|20: AssignFile(F, fn);|11: Reset(F);|23: while not eof(F) do|11: begin|22: Readln(F, str);|32: _hi_onEvent(onRead, str);|10: end;|15: CloseFile(F);|4:end;|0:|27:procedure THiAsmClass.tStr;|5:begin|23: dtString(_Data, str);|4:end;|4:end.|
link(onRead,12495488:doEvent1,[])
link(FileName,1357405:Var2,[])
}
Add(Counter,2200361,581,378)
{
Max=1000000
link(onNext,1392561:doText,[])
}
Add(Hub,12495488,532,378)
{
link(onEvent1,2200361:doNext,[])
link(onEvent2,3881187:doProcessMessages,[(567,391)(567,468)])
}
Add(Label,1392561,637,378)
{
Left=320
Top=175
}
Add(Application,3881187,588,462)
{
}
Add(Memory,8663227,392,56)
{
link(onData,10824360:doCaption,[(440,62)(440,48)(170,48)(170,69)])
}
Add(GetDataEx,1357405,406,130)
{
Angle=3
link(Data,8663227:Value,[(398,135)])
}
Add(Button,12947402,273,182)
{
Left=135
Top=210
Caption="1"
link(onClick,12721924:doOpen,[])
}
Add(Button,8767311,294,378)
{
Left=320
Top=210
Caption="2 IC"
link(onClick,8651700:doRead,[])
}