|
Работа с файлами
|
|||
---|---|---|---|
#18+
У меня есть 300-400 файлов в каждом 200-300 строк. Количество файлов как и их размер постоянно растет и уже сейчас на некоторых заковыристых операциях гуи подмораживается. Есть операции как чтения так и изменения некоторых строк в файле. Соответственно встает вопрос оптимизации. Порывшись в гугле я остановился на двух подходах. Первый Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Второй Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Вопрос, какой предпочтительней. И еще такой вопрос - перебор файлов делать внутри метода или снаружи Код: c# 1. 2. 3. 4. 5. 6.
Или Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 10:17 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
а что вы делаете с этими файлами? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 10:40 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7 Вопрос, какой предпочтительней. И еще такой вопрос - перебор файлов делать внутри метода или снаружи Приходит Сара к раввину. – У меня сегодня брачная ночь, так я думаю: мне в постель лечь в комбинации или без? В это время прибегает Абрам: – У меня проблема: коммунисты хотят, чтобы я вступил в колхоз! Что делать? Раввин: – Абрам, вступишь ты в колхоз или нет – тебя все равно вые…ут. Кстати, Сара, тебя это тоже касается. В обработчике клика - только вызов внешнего метода - реализация может быть самой разной, гуй детали работы с файлами не должны интересовать. в отдельном потоке обработку файлов делай ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 10:42 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79а что вы делаете с этими файлами? я беру из них данные, добавляю, модифицирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 10:52 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7, Оба указанных вами подхода по сути одно и тоже. Почему у вас несколько сот файлов? Вы не можете их объединить в один? Какова специфика работы с файлами? Вы меняете данные постоянно или один раз за запуск приложения? Возможно, имеет смысл не закрывать каждый раз файлы после модификации, а держать открытыми? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 11:03 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79jenya7, Оба указанных вами подхода по сути одно и тоже. Почему у вас несколько сот файлов? Вы не можете их объединить в один? Какова специфика работы с файлами? Вы меняете данные постоянно или один раз за запуск приложения? Возможно, имеет смысл не закрывать каждый раз файлы после модификации, а держать открытыми? это CSV файлы для хранения локальных переменных и другой информации о тестах. формат я не могу менять TestStand, по крайней мере та версия которая у меня, дает две опции - таблицы в базе данных, и CSV файлы. файлы построены по строгой модели я не могу ее менять. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:15 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
да в дополнение - приложение чисто для удобства - допустим в 300 файлах надо поменять значение переменной - не лопатить же все руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:18 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7таблицы в базе данных, с базой было бы сильно проще. не думали? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 12:24 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79jenya7таблицы в базе данных, с базой было бы сильно проще. не думали? Я не только думал, я делал. В TestStand версии 4.2 с которой я работаю есть баг, который мы не смогли решить. И потом файл это довольно удобная вещь - быстро открыл, посмотрел, изменил, перебросил на другой комп, все быстро и легко. А теперь представьте что данные хранятся в таблицах и кто-нибудь захотел просмотреть их у себя на компе. Тут возникает по крайней мере три вопроса 1. Установлен у тебя MySQL? 2. Установлен у тебя MySQL Workbench? 3. Умеешь ты писать SQL Query? ах да ну давайте еще сделаем дамп, создадим базу данных.... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 13:08 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7, Ну это ваше мнение, я его не поддерживаю, но это неважно. В контексте заданного вами вопроса ответ следующий: 1) Выносите обработку файлов в асинхрон. Вариантов много - Backgroundworker, Task, async/await, BeginInvoke и т.д. 2) Файлы держите открытыми, а не переоткрывайте каждый раз. Не забывайте Flush() 3) Если осилите, то MemoryMappedFiles, благодаря чему вы можете сразу отобразить файлы в память Пункт 3 - это если требуется максимально быстро работать с файлами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 13:13 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79jenya7, Ну это ваше мнение, я его не поддерживаю, но это неважно. В контексте заданного вами вопроса ответ следующий: 1) Выносите обработку файлов в асинхрон. Вариантов много - Backgroundworker, Task, async/await, BeginInvoke и т.д. 2) Файлы держите открытыми, а не переоткрывайте каждый раз. Не забывайте Flush() 3) Если осилите, то MemoryMappedFiles, благодаря чему вы можете сразу отобразить файлы в память Пункт 3 - это если требуется максимально быстро работать с файлами. Пункт 2 я не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 13:25 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Я так понял самый лучший способ работы с файлом - быстро считать содержимое - отпустить файл - быстро обработать содержимое - и если надо записать содержимое обратно в файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 13:39 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7Пункт 2 я не понял. Когда вы обращаетесь к File или using (StreamReader), то вы открываете файл, совершаете операцию, закрываете файл. Открытие/закрытие файлов вообще операция небыстрая, и вы на 400 файлов потратите немногим менее 1/10 секунды только на это. Так что Dispose нужно делать при закрытии приложения. А чтобы данные не терялись, нужно скидывать кэш на диск методом Flush Далее, зачем вам при каждом открытии считывать все его строки? Держите содержимое файлов в памяти, а все изменения скидывайте на диск. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 15:18 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79Когда вы обращаетесь к File или using (StreamReader), то вы открываете файл, совершаете операцию, закрываете файл. Открытие/закрытие файлов вообще операция небыстрая, и вы на 400 файлов потратите немногим менее 1/10 секунды только на это. то есть во время операции 400 файлов будут открыты в конце? ну в общем то как мне кажется это не срашно. но возникает другой вопрос - если я хочу записать обратно в файл File.WriteAllLines(file_path, buffer); - возникне ексэпшен, файл ведь занят. Arm79Далее, зачем вам при каждом открытии считывать все его строки? Держите содержимое файлов в памяти, а все изменения скидывайте на диск. сколько время держать? я могу работать с файлами сегодня, потом через пару дней, или через неделю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 15:47 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
jenya7если я хочу записать обратно в файл File.WriteAllLines(file_path, buffer); - возникне ексэпшен, файл ведь занят. Если вы открыли этот файл, почему он должен быть занятым? jenya7сколько время держать? я могу работать с файлами сегодня, потом через пару дней, или через неделю. И все эти недели ваша программа запущена? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 15:53 |
|
Работа с файлами
|
|||
---|---|---|---|
#18+
Arm79, Спасибо за информацию. Буду делать выводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 16:37 |
|
|
start [/forum/topic.php?fid=20&msg=38691590&tid=1402720]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 146ms |
0 / 0 |