Это специфично для реализации, но ваш интерпретатор, вероятно, интерполирует константы времени компиляции, но не результаты выражений во время выполнения.
В дальнейшем я использую CPython 2.7.3.
Во втором примере выражение "strin"+"g"
оценивается во время компиляции и заменяется на "string"
. Это приводит к тому, что первые два примера ведут себя одинаково.
Если мы рассмотрим байт-коды, мы увидим, что они точно такие же:
# s1 = "string"
2 0 LOAD_CONST 1 ('string')
3 STORE_FAST 0 (s1)
# s2 = "strin" + "g"
3 6 LOAD_CONST 4 ('string')
9 STORE_FAST 1 (s2)
Третий пример включает в себя прогон -time concatenation, результат которого не будет автоматически интернирован:
# s3a = "strin"
# s3 = s3a + "g"
4 12 LOAD_CONST 2 ('strin')
15 STORE_FAST 2 (s3a)
5 18 LOAD_FAST 2 (s3a)
21 LOAD_CONST 3 ('g')
24 BINARY_ADD
25 STORE_FAST 3 (s3)
28 LOAD_CONST 0 (None)
31 RETURN_VALUE
Если вы должны вручную intern()
получить результат третьего выражения, вы получите тот же объект, что и раньше:
>>> s3a = "strin"
>>> s3 = s3a + "g"
>>> s3 is "string"
False
>>> intern(s3) is "string"
True
Мы недавно сделали изрядное количество сравнения Velocity и Memcached. В ореховой скорлупе мы нашли, что Скорость была 3x - 5x медленнее, чем Memcached, и (еще более кардинально) это в настоящее время не имеет поддержки мультиполучить операции. Таким образом, в данный момент я рекомендовал бы идти с Memcached. Кроме того, другой урок, который мы извлекли, был то, что самая медленная операция в распределенном кэшировании является сериализацией и десериализацией (по крайней мере, в ASP.NET). Незавершенный кэш ASP.NET является порядком величин быстрее. Таким образом, необходимо выбрать кэширующиеся стратегии намного более тщательно.
Если Вы не возражаете платить за лицензию, Вы можете использование Масштабировать горизонтально Сервер состояния, о котором я говорю в моем ответе на подобный вопрос здесь . Они имеют и 32-и 64-разрядные версии.
РЕДАКТИРОВАНИЕ: Несмотря на название продукта, это обрабатывает и Состояние сеанса и распределенное кэширование.
Memcached имеет некоторые библиотеки с открытым исходным кодом, если я не ошибаюсь поэтому, если Вы хотите пойти путем на 64 бита, Вы не можете просто перекомпилировать?
я оценил Скорость, когда она сначала прибыла, но пришла к выводу, что это было немного не разработано на том этапе. Способность выполнить memcached на серверах не-Windows является также премией.