В моей программе у меня есть метод, который требует, чтобы при каждом его вызове открывалось около 4 файлов, так как мне нужно взять некоторые данные. Все эти данные из файла, который я хранил в списке для манипуляции. Мне примерно нужно вызывать этот метод около 10000 раз. Что делает мою программу очень медленной?

Любой метод для обработки этих файлов лучше и хранение целых данных в списке занимает много времени, что является лучшей альтернативой для списка?

Я могу дать некоторый код, но мой предыдущий вопрос был закрыт, так как это только смутило всех, так как это часть большой программы, и ее нужно полностью объяснить, чтобы понять, поэтому я не даю никакого кода, пожалуйста, предложите способы, чтобы думать об этом в целом вопрос...

Заранее спасибо

1
kaushik 9 Июн 2010 в 18:28

5 ответов

Лучший ответ

Возможно, было бы лучше загрузить ваши данные в базу данных и поместить некоторые индексы в базу данных. Тогда будет очень быстро делать простые запросы к вашим данным. Вам не нужно много работать, чтобы настроить базу данных. Вы можете создать SQLite базу данных, не требуя отдельного процесса, и в ней нет сложного процесса установки.

1
Mark Byers 9 Июн 2010 в 14:32

Если файлы структурированы, вроде файлов конфигурации, возможно, было бы хорошо использовать библиотеку ConfigParser, иначе, если у вас есть другой структурный формат, то я думаю, что было бы лучше хранить все эти данные в JSON или XML и выполнять любые необходимые операции с вашими данными.

0
sultan 9 Июн 2010 в 14:44

Как общая стратегия, лучше хранить эти данные в кеше в памяти, если они статичны и относительно малы. Затем вызовы 10k будут читать кэш в памяти, а не файл. Намного быстрее.

Если вы изменяете данные, альтернативой может быть база данных, такая как SQLite, или встроенный MS SQL Server (и есть и другие!).

Не ясно, что это за вид данных. Это просто данные конфигурации / свойств? Иногда вы можете найти библиотеки для обработки / манипулирования / хранения этих данных, и они обычно имеют собственный внутренний кэш в памяти, все, что вам нужно сделать, это вызвать одну или две функции.

Без дополнительной информации о файлах (насколько они велики?) И данных (как они отформатированы и структурированы?) Сложно сказать больше.

3
FrustratedWithFormsDesigner 9 Июн 2010 в 14:33

Открытие, закрытие и чтение файла 10000 раз всегда будет медленным. Можете ли вы открыть файл один раз, сделать 10000 операций над списком, а затем закрыть файл один раз?

2
Pace 9 Июн 2010 в 14:32

Вызовите файл open из вызывающего метода того, который вы хотите запустить. Передать данные в качестве параметров методу

0
Derek 9 Июн 2010 в 14:40