C# 拥有大型数据库上下文是否会影响性能?
我正在构建一个web应用程序,在一个数据库中有30-35个表。现在的问题是,我想把应用分成3个不同的前端(不同的团队需要不同的东西)。3个不同的项目 App1可能使用15-20个表,App2可能使用10个表,App3可能使用15个表 我计划制作一个名为Models的项目,该项目具有数据库中所有表的dbContext,并将其用于web应用程序项目。如果我需要添加或更新数据库,我可以只更新一个模型项目C# 拥有大型数据库上下文是否会影响性能?,c#,asp.net,performance,entity-framework,dbcontext,C#,Asp.net,Performance,Entity Framework,Dbcontext,我正在构建一个web应用程序,在一个数据库中有30-35个表。现在的问题是,我想把应用分成3个不同的前端(不同的团队需要不同的东西)。3个不同的项目 App1可能使用15-20个表,App2可能使用10个表,App3可能使用15个表 我计划制作一个名为Models的项目,该项目具有数据库中所有表的dbContext,并将其用于web应用程序项目。如果我需要添加或更新数据库,我可以只更新一个模型项目 一位同事提到,您应该只包含您需要的内容,所以我应该为每个web项目创建3个单独的DBContext
一位同事提到,您应该只包含您需要的内容,所以我应该为每个web项目创建3个单独的DBContext,否则包含不必要的表会影响性能。我认为从性能角度看这不是问题,但从维护角度看,我肯定会遇到挑战 我经历过类似的情况,我们在不同的功能中共享了一个基于edmx的数据模型。但是,每个功能只关注特定数量的表
有了这个问题,每当我们需要更改特定于任何功能的任何表时,我们就开始面临这个问题,这些功能要求我们接触单个数据模型,并且在签入期间还导致不必要的合并冲突 我认为从性能角度看这不是一个问题,但从维护角度看,我确实看到了挑战 我经历过类似的情况,我们在不同的功能中共享了一个基于edmx的数据模型。但是,每个功能只关注特定数量的表 有了这个问题,每当我们需要更改特定于任何功能的任何表时,我们就开始面临这个问题,这些功能要求我们接触单个数据模型,并且在签入期间还导致不必要的合并冲突 一位同事提到,[…]如果包含不必要的表,将导致性能下降 当同事们这样说的时候,你告诉他们要么用证据支持这种说法,要么闭嘴。说真的,世界上已经有足够多的货运邪教节目了。这与同事强制你使用
String.Empty
是一样的,因为这比使用“
要快,因为他们在博客上读过一次。提示:不是
对你听到的每一个说法都进行批评是非常健康的,尤其是如果这个说法没有任何现实依据的话
是的,加载具有更多属性的类型将需要更多磁盘I/O和更多CPU周期。但这将是极其微不足道的。你不会注意到这一点*
不过,如果您使用的是EDMX,情况就完全不同了,因为加载和解析5 MB的元数据会增加应用程序加载时间的秒数*
*:是的,我正在寻找这两种说法的来源
一位同事提到,[…]如果包含不必要的表,将导致性能下降
当同事们这样说的时候,你告诉他们要么用证据支持这种说法,要么闭嘴。说真的,世界上已经有足够多的货运邪教节目了。这与同事强制你使用String.Empty
是一样的,因为这比使用“
要快,因为他们在博客上读过一次。提示:不是
对你听到的每一个说法都进行批评是非常健康的,尤其是如果这个说法没有任何现实依据的话
是的,加载具有更多属性的类型将需要更多磁盘I/O和更多CPU周期。但这将是极其微不足道的。你不会注意到这一点*
不过,如果您使用的是EDMX,情况就完全不同了,因为加载和解析5 MB的元数据会增加应用程序加载时间的秒数*
*:是的,我目前正在寻找这两种说法的来源。回答标题中的问题:不,我没有看到任何超大
DbContext
s的性能受到影响。在我工作过的一个项目中,DbContext
被定义为将近1000个DbSet
s,配置时间(调用onconfigurang
和OnModelCreating
所需的时间)大约为2秒,每个实体都是通过Fluent API配置的;因此,你可以说,只有35个实体的命中率可以忽略不计(如果有的话)
也就是说,是否使用一个或多个
DbContext
取决于您将如何使用它们。如果有一个清晰的数据分离,您可以清楚地说“这个表将只在这里使用”,并且不会重复DbSet
,那么您可以将它们分开。回答标题中的问题:不,我没有看到超大DbContext
的性能受到任何影响。在我工作过的一个项目中,DbContext
被定义为将近1000个DbSet
s,配置时间(调用onconfigurang
和OnModelCreating
所需的时间)大约为2秒,每个实体都是通过Fluent API配置的;因此,你可以说,只有35个实体的命中率可以忽略不计(如果有的话)
也就是说,是否使用一个或多个
DbContext
取决于您将如何使用它们。如果有一个清晰的数据分离,你可以清楚地说“这个表将只在这里使用”,并且你不会重复DbSet
,你可以将它们分开。我不认为会有任何不可忽略的性能影响,但由于不同的原因,分离仍然是好的。30-35个表是一个相当小的数字,正如我使用DbContext
处理数百个(接近千个)表一样。当配置上下文时,性能影响(如果有)将发生在首次初始化时