ASP.NET Templating - PullRequest
       8

ASP.NET Templating

2 голосов
/ 10 ноября 2008

Мы создаем механизм шаблонов текста из пользовательского модуля HttpModule, который заменяет теги в нашем HTML целыми фрагментами текста из файла XML.

В настоящее время файл XML загружается в память в виде словаря строк / строк, поэтому поиск / замена, выполняемые модулем HttpModule, могут быть очень быстро выполнены с использованием регулярных выражений.

Мы стремимся расширить использование этого, хотя и для объединения больших и больших разделов заменяемого текста, и я обеспокоен тем, чтобы сохранить больше подробного текста в памяти за один раз как часть Словаря, особенно когда мы используем ASP. NET кеширование для многих целей.

Есть ли у кого-нибудь предложения по более эффективной и масштабируемой структуре данных / стратегии управления, которые мы могли бы использовать?

ОБНОВЛЕНИЕ: В ответ на великое предложение Корбина Марча, приведенное ниже, я не думаю, что это тот случай, когда мы идем по «темной дороге» (хотя я ценю беспокойство). Наше приложение разработано так, чтобы его можно было полностью перерисовывать для разных клиентов, вплоть до текста в любом месте страницы, включая возможность использования нескольких языков. Техника, которую я описал, оказалась наиболее гибким способом справиться с этим.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2008

Объем используемой памяти будет примерно таким же, как размер файла. XML будет иметь некоторые накладные расходы в тегах, которых нет в словаре, так что это безопасная оценка требований к памяти. Так вы про 10-50 МБ или 100-500 МБ? Не обязательно беспокоиться о 10–50 МБ.

Если вас это беспокоит, вам нужно подумать о том, действительно ли вам нужно выполнять замены каждый раз, когда страница загружается. Можете ли вы взять на себя задачу перехода к базе данных или XML-файлу один раз на страницу, а затем кэшировать выходные данные страницы ASP.NET и удерживать их в течение часа? Если это так, рассмотрите возможность использования Page Caching .

2 голосов
/ 10 ноября 2008

Пара идей:

Сжатие значений вашего словаря. Ознакомьтесь с статьей о сжатии кэша Скотта Хансельмана , чтобы понять дух упражнения. Если у вас большие словарные ключи, подумайте и об их сжатии.

Загружать элементы из вашего XML-файла в память только по запросу и прикреплять срок действия элемента. Если срок действия истек без другого запроса, выгрузите элемент. Идея состоит в том, что некоторые элементы словаря используются реже, поэтому допустимо попадание ввода-вывода для нечастых элементов. Очевидно, ASP.NET Cache сделает это за вас - я предполагаю, что кэш-память вне контекста к тому времени, когда вы обрабатываете вывод.

Просто мнение ... но моя паучья мысль предупреждает меня, что вы можете идти темной дорогой. Огромная часть ASP.NET - это его шаблоны: главные страницы, шаблоны страниц, пользовательские элементы управления, пользовательские элементы управления, шаблонные элементы управления, схемы ресурсов для интернационализации. Если это вообще возможно, я бы попытался решить вашу проблему с помощью этих инструментов, а не текстового модуля HttpModule.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...