Можно использовать этот простой модуль:
https://github.com/nishant-boro/django-rest-framework-download-expert
Этот модуль обеспечивает простой способ служить файлам для загрузки в платформе отдыха django с помощью модуля Apache Xsendfile. Это также имеет дополнительную функцию обслуживания загрузок только пользователям, принадлежащим конкретной группе
Я помню, что это поведение было своего рода изменением в последнюю минуту. В ранних бета-версиях .NET 2.0 Nullable
был «нормальным» типом значения. Упаковка нулевого
значения int?
превратила его в упакованный int?
с логическим флагом. Я думаю, что причина, по которой они решили выбрать нынешний подход, заключается в последовательности. Скажите:
int? test = null;
object obj = test;
if (test != null)
Console.WriteLine("test is not null");
if (obj != null)
Console.WriteLine("obj is not null");
В первом подходе (box null
-> boxed Nullable
) вы не получите «test is not null», но вы получите: объект не равен нулю », что странно.
Кроме того, если бы они поместили значение, допускающее значение NULL, в boxed-Nullable
:
int? val = 42;
object obj = val;
if (obj != null) {
// Our object is not null, so intuitively it's an `int` value:
int x = (int)obj; // ...but this would have failed.
}
Кроме того, я считаю, что текущее поведение имеет смысл для таких сценариев, как значения базы данных, допускающие значение NULL (подумайте о SQL -CLR ... )
Весь смысл предоставления типов, допускающих значение NULL, состоит в том, чтобы упростить работу с переменными, которые не имеют значимого значения. Они не хотели выделять два разных, не связанных между собой типа. int?
должен вести себя более или менее как простой int
. Вот почему C # предоставляет поднятые операторы.
Таким образом, при распаковке типа значения в версию, допускающую значение NULL, среда CLR должна выделить объект
Nullable
, инициализировать поле hasValue равным true и установить для поля значения то же значение, что и в типе значения в штучной упаковке. Это влияет на производительность вашего приложения (выделение памяти во время распаковки).
Это неверно. CLR должна выделить память в стеке для хранения переменной независимо от того, допускает ли она значение NULL. Там' размещение его в сеансе должно быть вполне нормальным
В качестве примечания: если вы выполняете один и тот же запрос снова и снова, ваш сервер БД должен кэшировать его сам (для MySQL он будет помещен в " кеш запросов "); так что, я полагаю, это было бы не так плохо, как вы думаете - даже если бы не так сильно оптимизировано ^^
если вы выполняете один и тот же запрос снова и снова, ваш сервер БД должен кэшировать его самостоятельно (для MySQL он будет помещен в « кеш запросов »); так что, я полагаю, это было бы не так плохо, как вы думаете - даже если бы не так сильно оптимизировано ^^ если вы выполняете один и тот же запрос снова и снова, ваш сервер БД должен кэшировать его самостоятельно (для MySQL он будет помещен в « кеш запросов »); так что, я полагаю, это было бы не так плохо, как вы думаете - даже если бы не так сильно оптимизировано ^^Это зависит от того, что вы re обработчик сеанса есть. Вашим обработчиком сеанса может быть MySQL, и поэтому вопрос будет не в том, что лучше, а в том, как оптимизировать обработку сеанса.
Обработчиком сеанса PHP по умолчанию являются файлы, но его можно довольно легко изменить на mysql.
Если вы ' Если вы говорите о данных, не относящихся к пользователю, просто сохраните их в БД. Позаботьтесь об оптимизации, если позже у вас возникнут проблемы. Обычно гораздо выгоднее использовать более совершенный шаблон проектирования, чем думать об оптимизации заранее. Разработайте свой код так, чтобы вы могли легко использовать другой обработчик для хранения, и у вас не было проблем с оптимизацией позже.
Если это зависит от пользователя, используйте сеанс, но при необходимости используйте соответствующий обработчик сеанса.
но при необходимости используйте соответствующий обработчик сеанса. но при необходимости используйте соответствующий обработчик сеанса.