Словарь / Клиент VS Переменные приложения
Привет, у меня вопрос о производительности моего сервера... я получил классический asp cms хостинг ~250 сайтов, для каждого сайта мы создаем классический ASP словарь, используя
set dict = CreateObject("Scripting.Dictionary")
dict.add "test1","Value Test1"
dict.add "test2","Value Test2"
dict.add "test3","Value Test3"
этот словарь затем загружается на каждой странице для каждого пользователя...
Допустим, мы получаем около 150 000 пользователей, которые ежемесячно посещают эти сайты, загружая словарь по ~100 тыс. каждый загрузке...
я должен использовать переменную приложения в качестве словаря вместо загрузки моего словаря каждый раз?
и это действительно улучшит производительность моего сервера?
3 ответа
Конечно, загрузка словаря для каждого запроса ASP - определенно плохая идея, и она будет не только ухудшать вашу производительность, но и фрагментировать вашу виртуальную память.
Вместо этого использование массива все еще имеет ту же проблему: каждый запрос должен был бы выделять всю память, необходимую для его хранения, и он по-прежнему должен заполняться при каждом запросе.
Простой ответ: да, используйте объект приложения в качестве словаря. Это будет стоить вам гораздо меньше памяти и процессора. Недостатком является то, сталкивается ли это с существующим использованием объекта приложения? Вам может потребоваться префикс ваших ключей, чтобы избежать этой проблемы.
Я почти уверен, что создание единственного файла scripting.dictionary на каждой странице не должно быть проблемой на любом веб-сайте. Если производительность является проблемой, я предлагаю сначала профилировать свою страницу, чтобы увидеть, в чем проблема. Большой шанс, что где-то неоптимизированный запрос займет более 100 мс.
Мы запускаем классический ASP-сайт, который обрабатывает 200 тыс. Просмотров страниц в день, и широко используем scriping.dictionary на каждой странице (более 25 экземпляров). Мы используем его в качестве основы для всех видов вещей. У вас есть пример сценария, который показывает, что диктовка не всегда уничтожается сборщиком мусора? Или что это поиск медленный по сравнению с любой альтернативой? Единственное неудобство, с которым мы столкнулись, это отсутствие метода "клонирования".
Я бы абсолютно рекомендовал загружать словарь только один раз, так как объект Dictionary тяжелый с точки зрения памяти, медленный с точки зрения поиска и большой: не всегда уничтожается в памяти, когда вы думаете, что это должно быть. Таким образом, даже после того, как пользователь покинул страницу, этот объект может оставаться в памяти в ожидании удаления (даже если вы явно "уничтожаете" его). Теперь умножьте на это количество просмотров страницы за посещение на пользователя...
Альтернативным и более легким методом памяти будет использование массива - одномерного, если вы можете отслеживать индекс где-то (лучше), или двумерного с помощью функции поиска, если вам нужно (конечно, если другие поддерживают код сейчас или в будущем).