Asp.net - Кэширование по сравнению со Статической переменной для хранения Словаря

Unicode определяет единственный огромный набор символов, присваивая одно уникальное целочисленное значение каждому графическому символу (который является основным упрощением и не на самом деле верен, но это достаточно близко в целях этого вопроса). UTF-8/16/32 просто различные способы закодировать это.

Короче говоря, UTF-32 использует 32-разрядные значения для каждого символа. Это позволяет им использовать код фиксированной ширины для каждого символа.

использование UTF-16, 16-разрядное по умолчанию, но который только дает Вам 65k возможные символы, который нигде не является около достаточно для полного набора Unicode. Таким образом, некоторые символы используют пар 16-разрядных значений.

И UTF-8 использует 8-разрядные значения по умолчанию, что означает, что 127 первых значений являются однобайтовыми символами фиксированной ширины (старший значащий бит используется, чтобы показать, что это - запуск многобайтовой последовательности, оставляя 7 битов для фактического символьного значения). Все другие символы кодируются как последовательности до 4 байтов (если не изменяет память).

И это приводит нас к преимуществам. Любой символ ASCII непосредственно совместим с UTF-8, таким образом, для обновления приложений прежней версии, UTF-8 является общим и очевидным выбором. Почти во всех случаях это будет также использовать наименьшее количество памяти. С другой стороны, Вы не можете сделать гарантии о ширине символа. Это может быть 1, 2, 3 или 4 широкие символа, который делает обработку строк трудной.

UTF-32 противоположен, он использует большую часть памяти (каждый символ является фиксированным 4 байта шириной), но с другой стороны, Вы знаете , что каждый символ имеет эту точную длину, таким образом, обработка строк становится намного более простой. Можно вычислить количество символов в строке просто от длины в байтах строки. Вы не можете сделать этого с UTF-8.

UTF-16 является компромиссом. Это позволяет большинство , символы вписываются в фиксированную ширину 16-разрядное значение. Таким образом, пока у Вас нет китайских символов, музыкальных нот или некоторых других, можно предположить, что каждый символ 16 битов шириной. Это использует меньше памяти, чем UTF-32. Но это до некоторой степени "хуже из обоих миров". Это почти всегда использует больше памяти, чем UTF-8, и это все еще не избегает проблемы что эпидемии UTF-8 (символы переменной длины).

Наконец, часто полезно просто пойти с какой поддержка платформ. Windows использует UTF-16 внутренне, таким образом, в Windows, который является очевидным выбором.

Linux варьируется немного, но они обычно используют UTF-8 для всего, что совместимо Unicode.

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

17
задан Matt Davis 21 August 2009 в 01:23
поделиться

3 ответа

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

Единственное, что стоит упомянуть, - это подумать о многопоточном доступе к этой коллекции. У вас очень быстро возникнут серьезные проблемы, если вы не заблокируете должным образом

20
ответ дан 30 November 2019 в 12:58
поделиться

Ну, я не думаю, что переписать код для использования статического поля вместо кеша приложения, если это необходимо, так уж сложно. Я лично сначала использую кеш. Нет необходимости в преждевременной оптимизации, вы измерили производительность? Он может вести себя правильно с объектом кэша приложения. Может, он даже хорошо работает с запросами к БД? :)

Итак, мой ответ - воспользуйтесь кешем и посмотрите, как он работает.

4
ответ дан 30 November 2019 в 12:58
поделиться

memcached - ваш друг! (но это может быть излишним, если вы не увеличиваете масштаб)

Есть идеи, насколько велик ваш словарь в кеше приложения? Я бы хотел порекомендовать это как хороший первый вариант.

3
ответ дан 30 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: