HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 16.12.2009, 01:40
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
С нами: 11278406

Репутация: 818


По умолчанию

Цитата:
Сообщение от vorona  
Ну все делают стандартно: file_get_contents или file, а потом в цикле preg_match или ereg. Но это ресурсоёмно слижко для больших файлов...
Делать было нечего...

PHP код:
<?php
echo 'Стартанули: '.round((memory_get_usage() /1024/1024), 3)."Mb<hr>";

$SRART microtime();
$fp fopen('ftp.txt','r'); // 430 КБ (441*095 байт)
while (!feof($fp)) {
    @
$data .= fgets($fp1024);
}
fclose($fp);
$END microtime();

echo 
'Fgets '.round((memory_get_usage() /1024/1024), 3)."Mb<br>";
echo 
'Расход времени на открытие файла '.($END $SRART).'<hr>';
unset(
$data);


$SRART microtime();
$fp fopen('ftp.txt','r'); // 430 КБ (441*095 байт)
while (!feof($fp)) {
    @
$data .= fread($fp1024);
}
fclose($fp);
$END microtime();

echo 
'Fread '.round((memory_get_usage() /1024/1024), 3)."Mb<br>";
echo 
'Расход времени на открытие файла '.($END $SRART).'<hr>';
unset(
$data);


$SRART microtime();
$fgc file_get_contents('ftp.txt');
$END microtime();

echo 
'File Get Cont '.round((memory_get_usage() /1024/1024), 3)."Mb<br>";
echo 
'Расход времени на открытие файла '.($END $SRART).'<hr>';
unset(
$fgc);


$SRART microtime();
$file file('ftp.txt');
$END microtime();

echo 
'File '.round((memory_get_usage() /1024/1024), 3)."Mb<br><br>";
echo 
'Расход времени на открытие файла '.($END $SRART).'<hr>';
unset(
$file);

echo 
'Очистили память '.round((memory_get_usage() /1024/1024), 3)."Mb <hr>";


$SRART microtime();
$fp fopen('ftp.txt','r'); // 430 КБ (441*095 байт)
while (!feof($fp)) {
    
$data fgets($fp1024);
    if(
preg_match('#(.*)\.ru#',$data,$m))
    @
$arr[] = $m[0];
}
fclose($fp);
$END microtime();

echo 
'Расход памяти FGETS '.round((memory_get_usage() /1024/1024), 3)."Mb<br>\r\n";
echo 
'Расход времени '.($END $SRART).'<br>';
echo 
count($arr).'<hr>'// найдено 4730 ФТП
unset($arr);


###########################################################################################

$SRART microtime();
$fp fopen('ftp.txt','r'); // 430 КБ (441*095 байт)
while (!feof($fp)) {
    
$data fread($fp1024);
    if(
preg_match('#(.*)\.ru#',$data,$m))
    @
$arr[] = $m[0];
}
fclose($fp);
$END microtime();

echo 
'Расход памяти FREAD '.round((memory_get_usage() /1024/1024), 3)."Mb<br>\r\n";
echo 
'Расход времени '.($END $SRART).'<br>';
echo 
count($arr).'<hr>'// найдено 431 ФТП
unset($arr);


###########################################################################################


$SRART microtime();
$fgc file_get_contents('ftp.txt');
preg_match_all('#(.*)\.ru#',$fgc,$m);
$END microtime();

echo 
'Расход памяти FGC '.round((memory_get_usage() /1024/1024), 3)."Mb<br>\r\n";
echo 
'Расход времени '.($END $SRART).'<br>';
echo 
count($m[1]).'<hr>'// найдено 4730 фтп
unset($m);



###########################################################################################
$SRART microtime();
$file file('ftp.txt');
foreach (
$file as $str) {
if(
preg_match('#(.*)\.ru#',$str,$m))
$arr[] = $m[0];
}
$END microtime();


echo 
'Расход памяти FILE '.round((memory_get_usage() /1024/1024), 3)."Mb<br>\r\n";
echo 
'Расход времени '.($END $SRART).'<br>';
echo 
count($arr); // найдено 4730 фтп

?>
Цитата:
Стартанули: 0.368Mb
Fgets 0.79Mb
Расход времени на открытие файла 0.102569
Fread 0.79Mb
Расход времени на открытие файла 0.005163
File Get Cont 0.79Mb
Расход времени на открытие файла 0.007277
File 1.924Mb

Расход времени на открытие файла 0.012859
Очистили память 0.369Mb
Расход памяти FGETS 0.968Mb
Расход времени 0.223655
4730
Расход памяти FREAD 0.423Mb
Расход времени 0.012558
431
Расход памяти FGC 1.966Mb
Расход времени -0.937841
4730
Расход памяти FILE 2.941Mb
Расход времени 0.156725
4730
 
Ответить с цитированием

  #12  
Старый 16.12.2009, 03:34
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами: 9497186

Репутация: 1304


По умолчанию

b3 Несколько странный результат в вашем посте. По времени-то все правильно (вроде), но по потреблению памяти - в скрипте результаты чтения не удаляются, следовательно памяти отжирать должно, приблизительно, одинаково. Если же не сохранять - то fread, fgets - логично должны быть впереди.

Плюс поиск с fread сделан не совсем правильно, потому и результаты не те.
__________________
Любая действущая программа устарела.
Создайте систему, которой сможет пользоваться даже дурак ,и только дурак захочет ею пользоваться.
Как правильно задавать вопросы: _http://www.yakimchuk.ru/questions.htm
 
Ответить с цитированием

  #13  
Старый 16.12.2009, 10:35
vorona
Участник форума
Регистрация: 07.09.2009
Сообщений: 298
С нами: 8777275

Репутация: 3
По умолчанию

Цитата:
Сообщение от Gifts  
vorona строковые функции + fread - если в пределах пхп, то будет достаточно быстро. Но вопрос - стоит ли, что это за файл в котором ищется, не проще ли будет переработать все в БД?

http://php.net/session_set_cookie_params - третий параметр позволяет устанавливать домен для сессионной куки. Выдержка из мана: To make cookies visible on all subdomains then the domain must be prefixed with a dot like '.php.net'.

m0Hze а если надо найти 5 вхождений в 50 метровом файле, уже что-то другое будете использовать?
Перебить в БД геморно будет наверно. Это нада перебить в БД и переписать весь код.
За ссыль спасибо - почсмотрю.
 
Ответить с цитированием

  #14  
Старый 16.12.2009, 10:40
vorona
Участник форума
Регистрация: 07.09.2009
Сообщений: 298
С нами: 8777275

Репутация: 3
По умолчанию

Цитата:
Сообщение от b3  
Делать было нечего...

Спасибо за код, но если несколько юзерей будут работать с большими файлами, то уже умножатся расходы.
 
Ответить с цитированием

  #15  
Старый 16.12.2009, 12:21
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
С нами: 11278406

Репутация: 818


По умолчанию

Цитата:
Сообщение от Gifts  
b3в скрипте результаты чтения не удаляются, следовательно памяти отжирать должно, приблизительно, одинаково. Если же не сохранять - то fread, fgets - логично должны быть впереди.

Плюс поиск с fread сделан не совсем правильно, потому и результаты не те.
Там везде unset() и хендлеры закрываются. А пример с fread специально сделан по анологии с другими, что б показать с какой дополнительной проблемой можно столкнутся.

Цитата:
Сообщение от vorona  
Спасибо за код, но если несколько юзерей будут работать с большими файлами, то уже умножатся расходы.
Странный ты человек, я тебе привел "таблицу" потребляемости, ты же вообще хотел fgc или file() использовать, в последнем случае потребляет больше всего ресурсов.
 
Ответить с цитированием

  #16  
Старый 16.12.2009, 18:04
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами: 9497186

Репутация: 1304


По умолчанию

b3 Я про такую строчку (в самом начале) @$data .= fgets($fp, 1024); Ансетится переменная ПОСЛЕ того как смотрим на потребление. И в таком виде все эти способы будут потреблять одинаково памяти:
Цитата:
Стартанули: 0.091Mb
Fgets 2.799Mb
Расход времени на открытие файла 0.296297
Fread 2.799Mb
Расход времени на открытие файла 0.13753
File Get Cont 2.799Mb
Расход времени на открытие файла -0.798061
File 2.823Mb
Расход времени на открытие файла 0.134742975235
__________________
Любая действущая программа устарела.
Создайте систему, которой сможет пользоваться даже дурак ,и только дурак захочет ею пользоваться.
Как правильно задавать вопросы: _http://www.yakimchuk.ru/questions.htm
 
Ответить с цитированием

  #17  
Старый 18.12.2009, 10:51
vorona
Участник форума
Регистрация: 07.09.2009
Сообщений: 298
С нами: 8777275

Репутация: 3
По умолчанию

если сайт на фс, то лучше использовать поиск гуглом по сайту?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mail.ru заменит поиск Яндекса на Google Gedj Мировые новости. Обсуждения. 12 12.12.2009 14:07
Подскажите алгоритм (Поиск максимумов в сигнале)) Marana С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 3 11.12.2009 16:16



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.