【问题标题】:ADO.NET Entity Framework - Pre-Generate Views -ADO.NET 实体框架 - 预生成视图 -
【发布时间】:2009-07-19 05:26:20
【问题描述】:

我们正在为我们的 ASP.NET 应用程序使用 ADO.NET 实体。

我了解到预生成的视图提高了性能。参考博文,

http://blogs.msdn.com/adonet/archive/2008/06/20/how-to-use-a-t4-template-for-view-generation.aspx,我生成了视图。命名空间和类生成为

namespace Edm_EntityMappingGeneratedViews
{


    /// <Summary>
    /// The type contains views for EntitySets and AssociationSets that were generated at design time.
    /// </Summary>
    public sealed class ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831 : System.Data.Mapping.EntityViewContainer
    {

        /// <Summary>
        /// The constructor stores the views for the extents and also the hash values generated based on the metadata and mapping closure and views
        /// </Summary>
        public ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831()
        {
            this.EdmEntityContainerName = "JSEntities";

我将此添加到我的数据层并测试性能。看不出有多大改善。 CPU 使用率总是达到 20-30% 利用率(响应时间很好)并在 500 毫秒 - 1 秒内降低到 0%。我认为由于每次都生成视图,CPU 利用率会很高。

我无法理解实体框架如何知道这是我为模型预先生成的视图类,尽管 MyModel.edmx 和 MyModel.Views.cs 与文件名匹配。

我是否应该更新 Web.Config 或 App.Config 以将 View 类映射到某个地方的模型?

请澄清。

【问题讨论】:

  • 检查哪个进程正在使用 CPU。您的 SQL Server 是否在同一台机器上?

标签: entity-framework ado.net


【解决方案1】:

我一直在想同样的事情并一直在做一些挖掘。

据我所知,生成的类文件包含一个程序集级属性EntityViewGenerationAttribute,它定义了包含预编译视图的类类型。 然后,在这里我只是做出有根据的猜测,在编译时必须通过反射加载类,并以某种方式绑定到视图定义的查询。可能在 ESQL 缓存中,这有一定意义。

即使视图是预编译的,它们也只生成 ESQL,而不是将运行的实际 TSQL。但是,预编译视图确实允许执行查询以跳过验证和 ESQL 生成步骤,这应该会带来轻微的性能提升,尤其是对于大型复杂查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多