Вот ситуация:
Я делаю небольшую прогу для разбора файлов журнала сервера.
Я протестировал его с файлом журнала с несколькими тысячами запросов (между 10000 - 20000 точно не знаю)
Что мне нужно сделать, это загрузить текстовые файлы журнала в память, чтобы я мог запросить их.
Это занимает больше всего ресурсов.
Методы, которые занимают больше всего времени процессора, - это те, которые (наихудшие в первую очередь виновные):
string.split - разбивает строковые значения на массив значений
string.contains - проверка, содержит ли пользовательский агент определенную строку агента. (определить идентификатор браузера)
string.tolower - различного назначения
streamreader.readline - читать файл журнала построчно.
string.startswith - определить, является ли строка строкой определения столбца или строкой со значениями
были некоторые другие, которых я смогла заменить. Например, получатель словаря был
принимая много ресурсов тоже. Который я не ожидал, так как это словарь, и его ключи должны быть проиндексированы. Я заменил его многомерным массивом и сэкономил немного времени процессора.
Теперь я работаю на быстром двухъядерном процессоре, и общее время, необходимое для загрузки упомянутого файла, составляет около 1 секунды.
Теперь это действительно плохо.
Представьте себе сайт, который посещает десятки тысяч человек в день. Загрузка файла журнала займет несколько минут.
Так, каковы мои альтернативы? Если таковые имеются, потому что я думаю, что это просто ограничение .net, и я ничего не могу с этим поделать.
EDIT:
Если некоторые из вас, гуру, захотят взглянуть на код и найти проблему, вот мои файлы кода:
Функция, которая потребляет наибольшее количество ресурсов, безусловно, LogEntry.New
Функция, которая загружает все данные, называется Data.Load
Общее количество созданных объектов LogEntry: 50 000. Время: 0,9 - 1,0 секунды.
Процессор: amd phenom II x2 545 3 ГГц.
не многопоточный