Страница: 1 |
Страница: 1 |
Вопрос: Считать файл построчно
Добавлено: 16.04.09 22:46
Автор вопроса: maza_____ | Web-сайт:
Подскажите плиз.Как считать текст из файла построчно и засунуть в массив
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #1
Добавлено: 16.04.09 23:00
Только я использовал Лист... для удобства
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 17.04.09 00:24
__Pavel__, ты специально всех в заблуждение вводишь своими ответами или просто сам нифига не знаешь?
maza_^, юзай File.ReadAllLines он вернет тебе уже готовый массив строк. 1 строка кода всего делов...
Номер ответа: 3
Автор ответа:
maza_____
ICQ: 9968842
Вопросов: 40
Ответов: 337
Web-сайт:
Профиль | | #3
Добавлено: 17.04.09 12:23
EROS спасибо
Номер ответа: 4
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #4
Добавлено: 17.04.09 19:41
А если нужно построчно считывать и тут же проверять или еще чего делать? Ведь не зря в вопросе спрашивалось именно построчно!
А если честно, то не знал спс за еще один метод... а не знаю, т.к. никогда не требовалось считывать текстовый документ в массив... я вообще даже представить не могу зачем это нужно??? Вау! У меня массив на 10Гб в ОЗУ... щас я его проверю!!! Да? Не легче считывать по одной строчке и проверять... Ох чую что-то здесь неладно...
Номер ответа: 5
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #5
Добавлено: 17.04.09 21:45
Итак... решил протестировать скорость работы обоих алгоритмов и выяснилось следующее...
Тестил я на двух файлах 60МБ и 1ГБ, состоящих из строк "0000000000"
Допустим ситуация такая... решили загрузить массив только для проверки, т.е. нужно просто проверить каждую строку из файла размером 1ГБ:
Итог можно узнать по комментариям... Для файла размером в 60МБ мой вариант работает почти в 3 раза быстрей!!!
Итак допустим нужно все же получить массив данных:
Т.к. List тот же массив, на это не обращаем внимания , но мой вариант опять же быстрее... при файле 60МБ, при файле 1ГБ в обоих случаях яма... по понятным причинам
Вот вам и 1 строчка кода
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 18.04.09 22:13
))) улыбнуло...
Ты, наверное, наивно полагаешь, что ты для меня америку открыл? )))) Я этим способом пользовался еще 2002 году, пока ты в подгузники гадил ))))
Во-первых, какому идиоту придет в голову держать 60 метров(а тем более 1ГБ) в текстовом файле и читать их все сразу в память?
Во-вторых, в 99% случаях текстовый файл - это максимум 1МБ.. а то и гораздо меньше.. сотня - другая килобайт... а на таких объемах данных разница в скорости если и будет, то она будет намного меньше скорости доступа к HDD
в-третьих, если бы ты был немного поумнее и поопытнее,то вместо того,чтобы гнуть тут пальцы и кидать дешевые понты, ты взял бы в руки декомпилятор, и ковырнул им ReadAllLines.. Там бы ты увидел следующее:
Ничего не напоминает,нет??? Судя по коду, ты делаешь тоже самое... так что результаты своего теста можешь засунуть сам знаешь куда...
Ну и из всего вышесказанного следует сделать вывод, что выигрых в скорости от твоего кода на реальных, а не на академических, задачах будет составлять стопиццот микросекунд,что есть ничтожно мало чтобы его использовать. Будем продолжать дискуссию или ты все понял?
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 18.04.09 23:42
Т.к. List тот же массив, на это не обращаем внимания , но мой вариант опять же быстрее... при файле 60МБ, при файле 1ГБ в обоих случаях яма... по понятным причинам
Паша, пожалуйста, поясни нам эти самые... "понятные причины"!
Хинт - я запустил ТВОЙ код который загружает данные в List на файле размером 1.2 ГБ, хранящим строчки "0000000000" и за 20 минут не дождался когда же данные будут загружены.
(хинт - у меня на компьютере 6 гигабайт оперативной памяти, а файл подкачки имеет возможность разрастись до нескольких сотен гигабайт если это потребуется). Тем не менее я не дождался окончания загрузки (больше 20 минут ждал, потом выключил). Пояснишь нам в чем именно затык?
Далее разбор кодов. Как ни странно, лажи коде нет. Тот факт что первый бенчмарк показывает преимущество твоего кода не говорит ровным счетом ни о чем - потому что у тебя не выполняется выделение памяти.
По поводу второго бенчмарка. Твой код определенно показывает примерно 7% выигрыш перед кодом который предоставил EROS.
В чем же проблема? Да ты и сам прекрасно знаешь в чем она, и даже указал мне на нее.
> Т.к. List тот же массив, на это не обращаем внимания
Понимаешь, List это List. А массив - это массив. И не обращать внимания на это никак нельзя.
Поэтому в твоем коде добавляем
Итог - твой код показывает результат на 2-5% хуже чем код EROS'а. Опять же вопрос - можешь объяснить причину этого? Нам было бы очень интересно узнать.
Вобщем ждем твоих ответов с нетерпением.
Номер ответа: 8
Автор ответа:
__Pavel__
Вопросов: 29
Ответов: 284
Web-сайт:
Профиль | | #8
Добавлено: 23.04.09 00:01
__Pavel__, ты специально всех в заблуждение вводишь своими ответами или просто сам нифига не знаешь?
... юзай File.ReadAllLines ...
Судя по коду, ты делаешь тоже самое
ВОТ! То что я и хотел услышать! А то что я делаю все вручную... мне так нравится
рррр... гав гав гав... что-то умное... гав гав
Итог - твой код показывает результат на 2-5% хуже чем код EROS'а
Сорри за грубую оптимизацию твоего ответа, но главный смысл перенес
Но согласись, что не всегда нужно считывать весь файл! А если это лог? Они бывают огромные и проверять их иногда нужно, а считывать все сразу это мягко сказать неразумно! Да и много примеров можно привести когда люди вместо БД пользуются *.txt или *.ini (тут недавно кто-то тему похожую создавал)... вобщем 2-5% это ничто по сравнению с тем что я привел.
"понятные причины" - лично у меня недостаток памяти
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 23.04.09 04:07
"понятные причины" - лично у меня недостаток памяти
Ну ок, у тебя недостаток памяти.
Я ж говорю - у меня 6 гигабайт памяти. 64-битная система. Приложения я собираю тоже 64-битное. То есть теоритически приложение сможет получить порядка 5 гигабайт, может и больше. Очевидно, что проблем с памятью нет (иначе мы бы получили OutOfMemoryException - а я его не получил).
В чем же причина того что я не дождался окончания загрузки? 20 минут - более чем достаточно для того чтоб считать с диска 1.2 ГБ (ты сам говорил что у тебя это десятки секунд занимает).