Почему Python 2.6 добавлял глобальное следующее () функция?

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

Вы можете предварительно сгенерировать эти виды отображения, используя EF Power Tools. Вот документация для этого здесь, в docs.microsoft.com .

Чтобы загрузить эти представления, вам нужно создать собственный класс DbConfiguration, например:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration() : base()
    {
        var path = Path.GetDirectoryName(this.GetType().Assembly.Location);
        SetModelStore(new DefaultDbModelStore(path));
    }
}

использование:

[DbConfigurationType(typeof(MyDbConfiguration))]
public class MyContextContext : DbContext 
{
}

Подробнее о DbConfiguration: здесь [ 119]

Еще одно, что вы можете сделать, если ваше приложение не запускается в Azure SQL , - это использовать CustomManifestTokenResolver, например,

public class CustomManifestTokenResolver : IManifestTokenResolver
{
    public string ResolveManifestToken(DbConnection connection)
    {
        return "2012";
    }

}

. Вы должны добавить его в свой класс DbConfiguration

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration() : base()
    {
        var path = Path.GetDirectoryName(this.GetType().Assembly.Location);
        SetModelStore(new DefaultDbModelStore(path));
        SetManifestTokenResolver(new CustomManifestTokenResolver());
    }
}

Еще одна проблема с производительностью во время запуска - это своевременная компиляция сборок EF. Вы можете использовать ngen, чтобы обойти это (предполагается, что ваши сборки находятся в папке bin \ release.

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install .\bin\release\EntityFramework.dll
 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install .\bin\release\EntityFramework.dll
 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install .\bin\release\EntityFramework.SqlServer.dll
 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install .\bin\release\EntityFramework.SqlServer.dll
 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install .\bin\debug\EntityFramework.dll
 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install .\bin\debug\EntityFramework.dll
 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install .\bin\debug\EntityFramework.SqlServer.dll
 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install .\bin\debug\EntityFramework.SqlServer.dll

Для общих проблем с производительностью EF у меня есть хранилище в github где я демонстрирую общие проблемы и решения этих проблем.

Обновление: добавлен трюк при запуске

Что-то, что мы используем в нашем программном обеспечении, - это выполнение пустого запроса во время запуска. Предполагая, что у нас есть контекст с именем MyContext и DbSet с именем Customers, мы будем писать что-то вроде этого во время запуска:

using(var db = new MyContext())
{
   db.Customers.Where(x=> x.Id < 0).ToList();   // There are no negative Ids, so this will always be and empty list
}

Это переместит ваш код инициализации в фазу запуска ваше приложение. Из-за этого пользователь не будет иметь медленный опыт для первого реального запроса в системе. Вы можете даже сделать это асинхронно. Вы просто должны убедиться, что нет других вызовов вашего контекста из других потоков в в то же время, потому что DbContext не является ThreadSafe.

14
задан jamylak 23 May 2013 в 03:47
поделиться

3 ответа

Это только для непротиворечивости с функциями как len(). Я верю next(i) вызовы i.__next__() внутренне.

См. http://www.python.org/dev/peps/pep-3114/

18
ответ дан 1 December 2019 в 09:33
поделиться

Обратите внимание на это в Python 3.0 + next метод был переименован к __next__. Это из-за непротиворечивости. next специальный метод, и специальные методы называют условно (PEP 8) с двойным продвижением и запаздывающим подчеркиванием. Специальные методы не предназначены, чтобы быть названными непосредственно, вот почему next созданный в функции был представлен.

10
ответ дан 1 December 2019 в 09:33
поделиться

Это звонит __next__ внутренне, но это заставляет его выглядеть более 'функциональным', чем 'объектно-ориентированный'. Обратите внимание, это - просто мое мнение, но мне не нравится next(i) вместо i.next(). Но как сказанный МГц Steve, это также помогает немного с непротиворечивостью.

0
ответ дан 1 December 2019 в 09:33
поделиться
Другие вопросы по тегам:

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