Когда лучше использовать статические функции в ASP.NET?

Попытайтесь удалить 0x первый и затем звоните Encoding.UTF8.GetString. Я думаю, что это может работать.

По существу: 0x44004500

Удаляет 0x, и затем всегда два байта являются одним символом:

44 00 = D

45 00 = E

6F 00 = o

72 00 = r

, Таким образом, это - определенно формат Unicode/UTF с двумя байтами/символами.

5
задан halfer 12 May 2018 в 18:29
поделиться

3 ответа

Минусы:

  • проблемы с потоками (статические функции не требуют вызова экземпляра, поэтому их легко вызывать из разных частей кода, и если они читают / пишут в общее состояние это состояние может быть повреждено в многопоточной среде, такой как ASP.NET)
  • трудно поддается модульному тестированию (поскольку статические функции не требуют экземпляра объекта, внедрение конструктора невозможно, что означает, что единственный способ вводить зависимости путем передачи их в качестве аргументов самой функции)

Плюсы:

  • производительность (это сомнительно - в большинстве случаев прирост производительности будет совершенно незначительным по сравнению с другими частями кода)
4
ответ дан 14 December 2019 в 08:53
поделиться

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

В качестве примера, вот фрагмент кода Я недавно написал для приложения ASP.NET, который по сути является кешем сериализатора. Сериализаторы дорого создавать, и мы можем повторно использовать один и тот же для каждого типа, пока существует наше приложение, поэтому нет необходимости тратить время на каждый поток запроса для них:

( Примечание: это имеет были сокращены, чтобы продемонстрировать статические аспекты)

public class XmlSerializerUtility
{
    private static Dictionary<Type, XmlSerializer> serializers = new Dictionary<Type, XmlSerializer>();
    private static object sync = new object();

    public static T Deserialize<T>(string input)
    {
       XmlSerializer xs = GetSerializer(typeof(T));
        using (StringReader sr = new StringReader(input))
        {
            return (T)xs.Deserialize(sr);
        }
    }

    public static XmlDocument Serialize(object input)
    {
        XmlDocument doc = new XmlDocument();
        XmlSerializer xs = GetSerializer(input.GetType());
        using (MemoryStream stream = new MemoryStream())
        {
            xs.Serialize(stream, input);
            stream.Position = 0;
            doc.Load(stream);
        }
        return doc;
    }

    private static XmlSerializer GetSerializer(Type type)
    {
        lock (sync)
        {
            XmlSerializer xs = null;
            if (!serializers.ContainsKey(type))
            {
                xs = new XmlSerializer(type);
                serializers.Add(type, xs);
            }
            else
            {
                xs = serializers[type];
            }
            return xs;
        }
    }
}
2
ответ дан 14 December 2019 в 08:53
поделиться

Я считаю, что лучше всего преобразовать ваше беззнаковое число в подписанное (перед сравнением). Скорее, чем наоборот.

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

Однако это может быть или не быть проблемой, в зависимости от кода.

Еще одна вещь, на которую следует обратить внимание, - это универсальность статических данных для всех запросов к серверу.

1
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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