EF,Linq和Telerik的性能问题

时间:2013-10-11 01:18:06

标签: linq-to-entities kendo-ui entity-framework-5 telerik-mvc

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

我是否可以通过Entity Framework从SQL Server 2012获取/更新数据时使用的特定数据源(如EntityFrameworkDataSource)?我知道这种类型的DataSource可用于WebForms,但是MVC呢?

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

在哪种情况下,我会使用其中一种?

1 个答案:

答案 0 :(得分:3)

你似乎混淆了一些事情。

第一

  • 您可能在Webforms中找不到像MVC中的XXXDataSource这样的控件;这是使用HTTP的另一种方式。

  • JSON / * JSONP *只是用于通过HTTP在客户端和服务器之间发送数据的数据格式(即从您的网页到你的MVC控制器又回来了)。它们根本没有任何来处理实体框架或数据库,除非它们所代表的数据最终通过其他方式最终在服务器端的数据库中结束 >例如实体框架

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

    {   “NewThingName”:“事物的名称”,   “NewThingColor”: “蓝”,   “NewThingPrice”: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;}
}

回到看起来像这样的kendo小部件,即JSON:

{"NewThingID":5}

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

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

  • KendoUI dataSource 框架对象可以使用JSON / JSONP发送数据请求,也可以与OData服务接口,选择哪个实际取决于您的服务类型与...互动。

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

  • 我个人推荐JSON和MVC一起使用KendoUI;我发现它只是更好地工作,但又一次,这只是我自己的经验。

  • MVC的服务器包装器只是一种在.cshtml文件中更轻松地配置和呈现Kendo小部件的方法;他们不会做任何你在客户端的纯JavaScript中无法做到的事情。我个人喜欢它们,因为它们使小部件的设置更容易管理,特别是初始数据绑定,但是你不需要它们,它们在运行时对小部件的功能几乎没有任何影响。 (注意你可以混合搭配,使用包装器进行渲染,然后使用JavaScript来自定义小部件的其他部分)

  • 服务器包装器提供的另一件事是用于Grid请求之类的MVC模型绑定器以及基于请求自动查询/更新数据库的扩展;虽然这些似乎节省时间,但它们可以是真正的PITA ,因为无法轻松自定义查询数据库的方式,并且它将您与命名空间紧密联系在一起。

  • 我在一个广泛使用Kendo小部件的应用程序上工作,我们根本不使用kendo绑定器;在发送之前,所有数据在客户端形成自定义格式,一旦它到达控制器就会让我们完全控制该过程。(我们使用EF与我们的数据库连接!)

第二

  • 你的开发商表示EF有“性能问题”的说法应该得到事实的支持;您或您的同事是否实际测量了您的特定数据负载的EF与数据集的预期与实际性能?当然,有时数据集可以在原始速度上“击败”实体框架,但纯粹的速度只是您的过程的一个方面 - 易用性,强类型,使用Linq到实体查询的能力,将复杂的表层次结构映射到简单使用对象图?

  • 唯一方式知道的是相互衡量一个!

另外请记住,您并不仅限于 在MVC控制器中使用Entity Framework;那里有很多 - Linq2SQL,NHibernate,Dapper等等。

希望有所帮助。