代码之家  ›  专栏  ›  技术社区  ›  sagesky36

EF、Linq和Telerik的性能问题

  •  -1
  • sagesky36  · 技术社区  · 12 年前

    在我的一些开发人员同事所说的方面,与ADO.Net/Dataset相比,EntityFramework/LINQ似乎存在性能问题。

    在通过实体框架从SQL Server 2012获取数据和向SQL Server 2012更新数据时,是否有特定的数据源(如EntityFrameworkDataSource)可以使用?我知道WebForms可以使用这种类型的DataSource,但是MVC呢?

    我知道我在Telerik上看到的3种数据类型是JSON、JSONP和ODATA。但是,这些似乎只适用于KendoUI Web产品,而不适用于ASP.NET MVC的服务器包装器。

    在什么情况下我会使用其中一个而不是另一个?

    1 回复  |  直到 12 年前
        1
  •  3
  •   Stephen Byrne BruceWayne    12 年前

    你似乎混淆了一些事情。

    第一

    • MVC中没有像XXXDataSource这样的控件,你可能会在Webforms中找到;这是一种不同的HTTP工作方式。

    • JSON语言 /* JSONP公司 *只是用于通过HTTP在客户端和服务器之间发送数据的数据格式(即从网页到MVC控制器再返回)。他们一无所有 完全 与实体框架或数据库有关,除非它们所代表的数据最终往往会出现在服务器端的数据库中 通过其他方式 例如实体框架

    • 因此,例如,当使用KendoUI时,它可以以JSON格式发送一条消息,表示您刚刚添加到客户端数据列表中的新项目,该项目将保存在服务器上。消息通过HTTP传输到服务器,如下所示:

      { “NewThingName”:“事物的名称”, “NewThingColor”:“蓝色”, “新交易价格”:9.99 }

    并通过MVC的模型绑定器映射到C#类,如下所示:

    public class NewThingModel
    {
       public string NewThingName{get;set;}
       public string NewThingColor{get;set;}
       public decimal NewThingPrice{get;set;}
    }
    

    在这一点上,图片中不再有JSON,直到您可以从控制器发回如下响应:

    public class NewThingAddResponse
    {
       public int NewThingID{get;set;}
    }
    

    返回到剑道小部件,如下所示,即JSON:

    {"NewThingID":5}
    

    然后Kendo小部件就可以更新自己了。在发送数据和接收响应之间发生的事情对小部件来说根本不感兴趣。

    • OData(OD数据) 是一种可以以JSON和XML格式(实际上是一种称为AtomPub的特殊XML格式)工作的协议,用于通过HTTP从服务器查询数据和将数据发送到服务器。它不仅仅是像JSON这样的格式,因为它描述了一整套用于与服务器上的资源交互的命令。

    • 剑道UI 数据源 框架对象可以使用JSON/JSONP发送数据请求,也可以与OData服务接口,使用哪种服务的选择实际上取决于您正在与什么类型的服务交互。

    • 如果你有 WCF数据服务 并且希望通过HTTP公开其数据,OData非常方便,因为对它的支持已经融入WCF;另一方面,如果您正在使用 MVC模式/WebAPI 那么JSON可能是更好的选择,因为WebAPI中的OData支持还没有完成。 (JSONP只是JSON的一种特殊形式,它允许您从其他域获取数据,而Ajax查询中默认不允许这样做)。

    • 就我个人而言,我推荐JSON与MVC一起使用KendoUI;我发现它效果更好,但话说回来,这只是我自己的经验。

    • MVC的服务器包装器只是在您的 .cshtml 文件夹;它们不会在客户端做任何在纯JavaScript中做不到的事情。就我个人而言,我喜欢它们,因为它们使小部件的设置更容易管理,尤其是初始数据绑定,但您不需要它们,而且它们在运行时几乎与小部件的功能无关。(请注意,您可以混合和匹配,方法是使用包装器进行渲染,然后使用JavaScript自定义小部件的其他部分)

    • 服务器包装器提供的另一件事是MVC模型绑定器,用于网格请求以及基于请求自动查询/更新数据库的扩展;尽管这些 似乎 就像节省时间一样,他们可以 实际PITA 因为不可能轻松地自定义数据库的查询方式,而且它会将您与它们的名称空间紧密耦合。

    • 我在一个广泛使用剑道小工具的应用程序上工作,我们根本不使用剑道绑定器;所有数据在发送之前都会在客户端形成自定义格式,一旦到达控制器,我们就可以完全控制流程。(我们使用EF与我们的数据库接口!)

    第二

    • 您的开发伙伴关于EF存在“性能问题”的声明应该得到确凿事实的支持;对于您的特定数据负载,您或您的同事是否实际测量了EF与数据集的预期性能与实际性能?当然,有时数据集可以在原始速度上“击败”Entity Framework,但纯速度只是流程的一个方面-易用性、强类型、使用Linq到Entity查询的能力如何,将复杂的表层次结构映射到易于使用的对象图中?

    • 这个 只有 知道的方法是衡量一个与另一个!

    还要记住,你不受限制 完全 在MVC控制器中使用实体框架;它们有很多——Linq2SQL、NHibernate、Dapper等等。

    希望能有所帮助。