Вверх ↑
Ответов: 45
Рейтинг: 4
#1: 2015-03-04 14:28:33 ЛС | профиль | цитата
Tad писал(а):
И про скорость

Если не считывать с Edit строку поиска, а как подсказал MAV сначала ее записать в память то скорость в 2 раза быстрей. И потом, если явно указать строку для поиска SearchInFile, скорость еще быстрей.
Сравните:
Add(MainForm,2953706,21,105)
{
Width=806
Height=564
link(onCreate,10876761:doFor,[(65,125)(65,157)(-6,157)(-6,188)])
}
Add(SearchInFile,13847902,266,98)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,9438959:doCompare,[])
link(onEnd,10172051:doStop,[(310,118)(310,187)(200,187)(200,111)])
}
Add(Edit,3153334,350,42)
{
Left=15
Top=10
Width=270
Text="123"
}
Add(Button,1057631,154,98)
{
Left=15
Top=40
Caption="Search"
link(onClick,10172051:doStart,[])
}
Add(Memo,2741103,434,105)
{
Left=15
Top=75
Width=270
ScrollBars=2
link(Str,13847902:NumStr,[(440,93)(356,93)(356,142)(272,142)])
}
Add(TimeCounter,10172051,210,98)
{
link(onStart,13847902:doSearch,[])
link(onStop,6042733:doText,[(253,111)(251,137)(253,153)])
}
Add(Label,6042733,266,147)
{
Left=76
Top=41
}
Add(If_else,9438959,350,105)
{
link(onTrue,2741103:doAdd,[])
link(Op2,3153334:Text,[(363,89)(356,89)])
}
Add(Memory,6592151,399,301)
{
Point(Data)
link(Data,3224100:Text,[(405,289)(356,289)(356,338)(307,338)])
}
Add(PointHint,6903760,147,28)
{
Info=#10:Ваш пример|
Transparent=0
VAlign=0
Width=337
Height=200
}
Add(SearchInFile,3296384,266,357)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,3074587:doCompare,[])
link(onEnd,2611087:doStop,[(310,377)(310,373)(142,373)(142,370)])
}
Add(Edit,3224100,301,294)
{
Left=15
Top=220
Width=270
Text="123"
}
Add(Button,12129626,98,357)
{
Left=15
Top=250
Caption="Search"
link(onClick,2611087:doStart,[])
}
Add(Memo,6396029,434,364)
{
Left=15
Top=285
Width=270
ScrollBars=2
link(Str,3296384:NumStr,[(440,352)(356,352)(356,401)(272,401)])
}
Add(TimeCounter,2611087,154,357)
{
link(onStart,10610625:doEvent1,[])
link(onStop,69595:doText,[(226,370)(226,412)])
}
Add(Label,69595,266,406)
{
Left=76
Top=251
}
Add(If_else,3074587,350,364)
{
link(onTrue,6396029:doAdd,[])
link(Op2,6592151:Value,[(363,348)(405,348)])
}
Add(PointHint,4718897,77,273)
{
Info=#46:Пример с записью строки в память перед поиском|
Transparent=0
VAlign=0
Width=407
Height=214
}
Add(Hub,10610625,231,357)
{
link(onEvent1,6592151:doValue,[(322,363)(322,307)])
link(onEvent2,3296384:doSearch,[(255,370)(255,363)])
}
Add(Memory,3160134,854,301)
{
Point(Data)
link(Data,11224983:Text,[(860,289)(811,289)(811,338)(762,338)])
}
Add(SearchInFile,11577702,721,357)
{
FileName="SIF.txt"
Point(onEnd)
Point(NumStr)
link(onSearch,1468738:doCompare,[])
link(Text,16453743:Var1,[(734,341)])
link(onEnd,14981175:doStop,[(765,377)(765,373)(597,373)(597,370)])
}
Add(Edit,11224983,756,294)
{
Left=335
Top=220
Width=270
Text="123"
}
Add(Button,7780723,553,357)
{
Left=335
Top=250
Caption="Search"
link(onClick,14981175:doStart,[])
}
Add(Memo,15550771,889,364)
{
Left=335
Top=285
Width=270
ScrollBars=2
link(Str,11577702:NumStr,[(895,352)(811,352)(811,401)(727,401)])
}
Add(TimeCounter,14981175,609,357)
{
link(onStart,12706251:doEvent1,[])
link(onStop,3978398:doText,[(681,370)(681,412)])
}
Add(Label,3978398,721,406)
{
Left=396
Top=251
}
Add(If_else,1468738,805,364)
{
link(onTrue,15550771:doAdd,[])
link(Op2,16453743:Var2,[(818,348)(860,348)])
}
Add(PointHint,606638,532,273)
{
Info=#42:Пример с явным указанием строки для поиска|
Transparent=0
VAlign=0
Width=407
Height=200
}
Add(Hub,12706251,686,357)
{
link(onEvent1,3160134:doValue,[(767,363)(767,307)])
link(onEvent2,11577702:doSearch,[(710,370)(710,363)])
}
Add(GetDataEx,16453743,854,336)
{
link(Data,3160134:Value,[])
}
Add(For,10876761,6,182)
{
End=200000
link(onEvent,3389893:doAdd,[(71,188)(71,153)])
link(onStop,3389893:doSave,[(71,195)(71,188)])
}
Add(StrList,3389893,104,147)
{
FileName="SIF.txt"
Strings=#3:123|3:321|6:123123|3:321|3:456|
}


4 или 6.5 секунд для почти миллиона строк это не существенно. ИМХО.

Когда данная процедура выполняется часто, любое ускорение процесса это хорошо
карма: 1

0