За последние 24 часа нас посетили 23514 программистов и 1630 роботов. Сейчас ищут 883 программиста ...

Что лучше: 40 раз по раз или 1 по 40 раз?

Тема в разделе "PHP для новичков", создана пользователем блудный сын, 22 ноя 2008.

  1. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Подскажите, как умнее поступить в следующей ситуации... На своем локальном компьютере с помощью РНР делаю выборку из большого количества файлов и необходимые мне данные сохраняю в файл. Выборка длится несколько минут, а файл получается большой, до 50 МБ. Компьютер откровенно перегружается. Вот хотел спросить, как лучше поступить: заганять эти 50 МБ в переменную, а потом ее сохранять в файл или очень много раз открывать файл и сохранять в него полученные данные по мере поступления (при файле 50 МБ придется открывать, дописывать и закрывать его около 5 млн. раз).
     
  2. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    О_о Жесть. Имхо комп не просто перегружается а а@енно перегружается!
     
  3. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    а что ты делаешь?
     
  4. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
  5. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Я делаю поиск и выборку нужных мне данных из большого количества имеющихся файлов и сохраняю эти данные в один файл, который уже будет использоваться дальше.
     
  6. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Нет смысла записывать в файл 2 байта, но и не нужно держать в памяти 10 мегабайт. Буфер в 4кб-1мб вполне подойдет.
     
  7. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Спасибо. Не буду в крайности впадаться и сделаю нечто среднее: буду по пол метра накапливать в переменную, а потом сбрасывать информацию с нее в файл.
     
  8. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    При записи в файл PHP использует буфера вывода.
    Каждый раз закрывая файл сбрасываете буфера вывода.
    ЗАЧЕМ 5 млн. раз открывать и закрывать файл?
    Откоройте 1 раз.
    5 млн. раз допишите в файл.
    Закройте 1 раз.

    НЕ надо
    php делает это за вас.
     
  9. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А ничего страшного, что файл в таком открытом состоянии будет около 5 минут? Сбои не будут происходить если вдруг антивирус или файловый менеджер будут мониторить папку с файлом?
    Это наверно что-то слишком редкое и сложное? Там даже коментов нет.
     
  10. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    все будет впорядке

    это совершенно стандартная вещь. Повторять буфер руками - дикие костыли.
    комментировать то нечего.
     
  11. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    блудный сын
    файлы открытыми висят сутками и неделями, и ничего, живы, важно только правильно открыть его. другое дело, что будет с тем, кто его попытается открыть...
     
  12. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Хорошо. Подскажите тогда как это в коде примерно будет выглядеть? Потому что проблема реальная. У меня таких больших файлов с выборкой должно быть больше 150 штук.

    Когда я накапливаю данные в переменную и вывожу их в барузер через Оперу, то например для файла в 18МБ у меня вывод занимает около 3х минут. Когда же я пытаюсь накапливать в переменную примерно по 300кБ, а потом накопленное дописывать в файл и обнулять ее, то такой вывод занимает около 7 минут. Вот что странно. А этот файл ведь не самый большой. Времени придется уйму потратить. Каким способом быстрее можно создать большой файл?
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Попробуйте писать по 1кб в файл.
     
  14. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Ага, быстрее стало. Минуты 1,5 заняло времени. Но писал не по 4 кБ, а по мере появления данных (где-то по 10 символов). Спасибо! Я раньше обычно как только произошла запись в файл, сразу же его закрывал. Потом опять открывал. Наверно это много времени отнимало. Но раз можно долго держать файл открытым, то токая скорость меня в принципе устраивает.