Я написал программу для класса, которая берет данные из URL-адреса, анализирует его для ключевых фраз и затем записывает в текстовый файл фразу, номер строки и номер столбца.Разделение операций чтения/записи улучшает эффективность программы?
В настоящее время я делаю это как единую операцию, в которой URL-адрес отправляется в буфер для чтения, в сканер для анализа, а затем в цикл, в котором каждая строка прочесывается, и ряд условных операторов используется для проверки для присутствия указанных ключевых фраз. Когда совпадение найдено, я пишу в файл.
Файл прочитан примерно в 60 тыс. Строк текста, и он занимает около 4000 мс в среднем, чтобы запустить эту полную операцию от начала до конца. Было бы более эффективно разбить задачи и сначала прочитать файл в структуре данных, а затем вывести результаты в файл, а не делать одновременно оба?
Кроме того, насколько большой эффект будет вытягивать данные из URL-адреса, а не читать его локально? У меня есть возможность сделать и то, и другое, но это будет зависеть от моих скоростных скоростей.
EDIT: Несколько хороший тестовый пример. За неделю мы изменили наш интернет-провайдер и обновили нашу широкополосную скорость от 6 Мбит/с до 30 Мбит/с. Это привело к тому, что среднее время чтения/разбора/записи сократилось до 1500 мс. Интересно видеть, как небольшие отклонения могут влиять на производительность.
Профилируйте свой код. Найдите узкое место –
, большинство из 4000 мс, вероятно, потрачено на алгоритм. поэтому на самом деле не имеет большого значения то, что вы делаете с сетевыми и файловыми операциями, если алгоритм не может быть оптимизирован. Хотя я бы предпочел сначала прочитать во всех данных бесплатные сетевые ресурсы (чтобы они не были связаны длительным процессом синтаксического анализа). Это, вероятно, не имеет большого значения. – ZhongYu
Вам следует избегать чтения целых файлов или содержимого URL-адресов в памяти, где это возможно. Он не масштабируется и не добавляет латентности. – EJP