Реклама на сайте Advertise with us

? PHP: считать строку из ба-а-а-альшого текстового файла ?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 00:50       Ответить с цитатойцитата 

bog писал:
.
если боевые условия - то даешь среднюю нагрузку на сервак...
10 реквестов в секунду на этот скрипт :)))



без проблем. на гиге мозгов отработает на раз.
вот 100-1000 - другой разговор.

а вот попробуй как ты fopen-ом посчитать количество строк на 10ти реквестах в секунду

JpS Live

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 01:10       Ответить с цитатойцитата 

гы... давайте бенчмарк устраивать...
задача - подсчет строк в файле
============
ini_set("memory_limit","240M");
$f=0;
$t=microtime();
$s=fopen("1.txt","r");
while(fgets($s))
{
$f++;
}
fclose($s);
echo "$f\nT:".(microtime()-$t);
============
результат
276419
T:0.274203


вариант через файл
============
<?
ini_set("memory_limit","240M");
$t=microtime();
$s=file("1.txt");
echo count($s);
echo "\nT:".(microtime()-$t);
?>
============
276419
T:0.379715

итого фгетс выиграл на 1десятую секунды icon_smile.gif

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 01:16       Ответить с цитатойцитата 

ну и скрипт абсолютный победитель при условии нелимитированных ресурсов.
========
ini_set("memory_limit","240M");
$f=0;
$t=microtime();
$s=fopen("1.txt","r");
$d=fread($s,200000000);
fclose($s);
$f=substr_count($d,"\n");
echo "$f\nT:".(microtime()-$t);
========
с результатом
276419
T:0.074166

блин, час на эту херню убил, в общем херня ваш file() на больших обьемов полюбому icon_smile.gif

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 01:27       Ответить с цитатойцитата 

а почему было не поставить ini_set("memory_limit","1M"); ? ;)
я тестировал на 1.5М строк.

JpS Live

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 01:31       Ответить с цитатойцитата 

Alpha_Juno писал:
Я все правильно расписал, file быстрее, fgets медленние.

файл это по сути две команды, одна читает файл в память, вторая парсит полученное в массив, так что она по определению не может быть быстрее.

а если у кого то файл работает быстрее то либо код неоптимизирован, либо файл кешируется icon_smile.gif

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 01:34       Ответить с цитатойцитата 

JpS писал:
а почему было не поставить ini_set("memory_limit","1M"); ? ;)
я тестировал на 1.5М строк.

а потому что 10мб файл через file() даже при 40мб лимите на РНР отваливался из за недостатка памяти. так что я чтоб не мучится сразу 240 поставил.

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 01:37       Ответить с цитатойцитата 

bog писал:
файл это по сути две команды, одна читает файл в память, вторая парсит полученное в массив, так что она по определению не может быть быстрее.
а если у кого то файл работает быстрее то либо код неоптимизирован, либо файл кешируется :)


да, но к сожалению ты не учел, что в случае вызова file выполняется машинный код, а в случае fopen/fgets - _многократный_ (!) вызов fgets из _интерпретируемого_ языка. внутри file делается тот же самый fgets, только цикл скомпилирован на языке C. в случае с fopen-ом fgets тоже скомпилирован на C, однако возникают накладные расходы на вызов этого самого кода.

JpS Live

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 01:40       Ответить с цитатойцитата 

bog писал:
а потому что 10мб файл через file() даже при 40мб лимите на РНР отваливался из за недостатка памяти. так что я чтоб не мучится сразу 240 поставил.


а ты попробуй лимитик то вообще убрать ;)

JpS Live

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 01:41       Ответить с цитатойцитата 

JpS писал:
да, но к сожалению ты не учел, что в случае вызова file выполняется машинный код, а в случае fopen/fgets - _многократный_ (!) вызов fgets из _интерпретируемого_ языка. внутри file делается тот же самый fgets, только цикл скомпилирован на языке C. в случае с fopen-ом fgets тоже скомпилирован на C, однако возникают накладные расходы на вызов этого самого кода.


ну попробуй мой бенчмарк на своей машине запустить и сам увидишь что быстрее работает ;)

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 01:49       Ответить с цитатойцитата 

bog писал:
ну попробуй мой бенчмарк на своей машине запустить и сам увидишь что быстрее работает ;)


ну во-первых, чуть выше я выкладывал результаты своего бенчмарка, который от твоего оличался лишь синтаксисом оформления, но если тебе будет легче, сделал copy-paste, поправил ошибочки и вот что получилось:

file:
1142483
T:0.184899

fopen/fgets:
1142483
T:0.230885

JpS Live

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 02:24       Ответить с цитатойцитата 

гы, ладно, завтра будет время - еще побалуемся.
надо будет текстовый файл твой взять для проверки еще icon_smile.gif)

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 02:27       Ответить с цитатойцитата 

ты кстати из шела скрипты запускал ?

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 02:27       Ответить с цитатойцитата 

bog писал:
гы, ладно, завтра будет время - еще побалуемся.
надо будет текстовый файл твой взять для проверки еще :))


для "чистоты эксперимента" еще и мою машину :)

JpS Live

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 02:29       Ответить с цитатойцитата 

bog писал:
ты кстати из шела скрипты запускал ?


из шела

JpS Live

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 02:30       Ответить с цитатойцитата 

JpS писал:
для "чистоты эксперимента" еще и мою машину icon_smile.gif

ловлю на слове icon_smile.gif)))

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 



С нами с 27.02.03
Сообщения: 873
Рейтинг: 402

Ссылка на сообщениеДобавлено: 03/11/04 в 09:22       Ответить с цитатойцитата 

Дык bog оно так и должно быть. file может быть быстрее за счет экстенсивных путей ;)
Но платить такую цену в реальности за эту "псевдоскорость" - это конечно надо быть охуенно умным...

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 03/11/04 в 11:06       Ответить с цитатойцитата 

но у меня то вышло что фгетс быстрее работает.
имхо может длина строк в файле тоже както влияет на скорость работы этих команд.

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 



С нами с 27.02.03
Сообщения: 873
Рейтинг: 402

Ссылка на сообщениеДобавлено: 03/11/04 в 11:46       Ответить с цитатойцитата 

Я думаю тут дело исключительно в ресурсах.
Если запихнуть весь файл в оперативу сразу и там его и юзать - то file быстрее будет.
А если кусками в память, там с ним трахацца вечно, а еще в своп не дай бог - то file сосет.

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 03/11/04 в 14:12       Ответить с цитатойцитата 

bog писал:
но у меня то вышло что фгетс быстрее работает.
имхо может длина строк в файле тоже както влияет на скорость работы этих команд.


у тебя файл был меньше, глянь результаты моих тестов, там количество строк выводится.

JpS Live

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »