首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架RPC与批处理性能

实体框架RPC与批处理性能
EN

Stack Overflow用户
提问于 2016-09-01 18:29:51
回答 1查看 256关注 0票数 0

我有一个带有应用程序池(IIS)的.net应用程序,它位于一台计算机上,而SQL server位于另一台计算机上。应用程序使用实体框架与数据库协同工作。我有两个选择来解决我的任务(从db获取数据)。在示例中,我在应用程序中有Entity1的列表,我需要从数据库中获取Entity2的列表(Entity2通过外键连接到Entity1 )。我有两个选择。

第一个是向DB发出一个批处理请求:

代码语言:javascript
复制
public List<Entity2> GetEntities(List<long> entity1IDs)
{
    db.Entity2.Where(e2 => entity1IDs.Contains(e2.Entity1ID)).ToList();
}
...
var entities2 = GetEntities(entities1.Select(e => e.Entity1ID).ToList());
foreach (var entity2 in entities2)
{
    ...
}

第二个是向DB发出n个rpc请求:

代码语言:javascript
复制
foreach (var entity1 in entities1)
{
    var entity2 = entity1.entity2;
    ...
}

我非常确定第一个选项一定有更好的性能,因为只有一个对DB的请求。但是它是如何影响应用程序池的呢?是的,这只是一个请求,但它是一个单位时间内内存中的大量动态数据。如果我们在数据库中有数百万条记录,那么对于应用程序池中内存使用率和cpu使用率较高的数据库,我们会有一个大请求来处理大量数据(选项1),而对于应用程序池中内存使用率和cpu使用率较低的数据库,则会有数百万个请求。

无论如何,我倾向于第一种选择,但我想知道更多的论点,也许一些实践结果和分析。

另外,有没有什么分析工具可以跟踪应用程序池与SQL配合使用的CPU使用量,以及要对应用程序池中的数据进行多少操作以进行比较?

EN

回答 1

Stack Overflow用户

发布于 2016-09-01 18:39:09

您面临的问题取决于您的服务器资源以及您发现哪些资源更昂贵。通常内存很便宜,但网络更昂贵,而且性能更是一个问题。

您所做的是在实际面对相关问题之前尝试优化您的解决方案。我会选择第一个,因为通常网络是一个更大的问题,每次创建连接都会损害性能。如果你真的因为你的大查询而遇到问题--这在大多数系统中是不太可能的--那么你应该考虑改进你的代码以满足你的特定需求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39269124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档