Используя Текстовые объекты как Параметры Типа для Дженериков в C#

Я не соглашаюсь, что выбор лучшего 1 будет всегда превосходить избранный счет по характеристикам для всех реализаций SQL. Это является все зависящим от реализации, Вы знаете. Любопытно, даже природа данных, хранивших в конкретной базе данных также, влияет на полный результат.

Позволяют нам исследовать их обоих способ, которым я реализовал бы их, если бы я должен был сделать так: Для обоих случаев проекция (оператор Where) оценка является общим шагом.

Затем для избранного лучшего 1, необходимо будет сделать чтение всех полей (если Вы действительно не выбирали лучший 1 'x', например: выберите лучший 1 1). Это будет функционально эквивалентно IQueryable. Любой (...)., за исключением того, что Вы проведете некоторое время, высвечиваясь в значении для каждого столбца первой записи, с которой встречаются, если БУДЕТ СУЩЕСТВОВАТЬ. Если ИЗБРАННЫЙ TOP найден в операторе, проекция является усечением, если нет никакой постпроекции proc (например, пункт ORDER BY). Это предварительно обрабатывает, несет маленькие расходы, но это - дополнительные расходы, если никакая запись действительно не существует, в этом случае, полный проект все еще сделан.

Для избранного количества, предварительно обрабатывание не сделано. Проекция сделана и если СУЩЕСТВУЕТ, ложь, результат мгновенен. Если СУЩЕСТВУЕТ, верно, количество все еще быстро, потому что это будет простой dW_Highest_Inclusive - dW_Lowest_Exclusive. Столь же быстрый как 500 - 26. Если существует, ложь, результатом является еще больше момента.

остающийся случай поэтому: Как быстро проекция и что Вы освобождаете путем выполнения полной проекции? И ответ приводит к наиболее важнейшей проблеме сюда, которая является: индексированное поле [NAME] или нет! Если у Вас будет индекс на [ИМЕНИ], то производительность любого запроса будет так близка, что это сводится к предпочтению разработчика.

В общем и целом, я просто запишу два - четыре запроса linq и произведу разницу во времени прежде и после.

  1. избранное количество
  2. выбирает лучший 1
  3. , выбирают лучший 1 1
  4. выбор любой

Повторение все 4 с некластеризованным индексом на [ИМЕНИ];

5
задан Marc Gravell 23 September 2009 в 16:27
поделиться

2 ответа

Вы можете динамически создать экземпляр типа:

public void test()
{
    Type someType = getSomeType(); // get some System.Type object
    Type openType = typeof(MyGeneric<>);
    Type actualType = openType.MakeGenericType(new Type[] { someType });
    object obj = Activator.CreateInstance(actualType);
}

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

17
ответ дан 18 December 2019 в 06:12
поделиться

Вы пытаетесь определить аргумент типа во время выполнения. Дженерики .Net требуют, чтобы аргументы типа были известны во время компиляции. На самом деле нет никакого способа сделать это, кроме включения типа. Вы можете получить дескриптор метода через отражение и вызвать его, но это некрасиво.

9
ответ дан 18 December 2019 в 06:12
поделиться
Другие вопросы по тегам:

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