拥有较大的 dbContext 是否会影响性能?
Is there a performance hit in having a large dbContext?
我正在构建一个网络应用程序,该应用程序将在一个数据库中包含 30-35 个表。现在的问题是我想将应用程序分成 3 个不同的前端(不同的团队想要不同的东西)。 3 个不同的项目。
App1 可能使用 15-20 个表,App2 可能使用 10 个,App3 可能使用 15 个。
我正计划制作一个名为 Models 的项目,该项目具有包含数据库中所有表的 dbContext,并将其用于 Web 应用程序项目。如果我需要添加或更新数据库,我可以只更新那个模型项目。
一位同事提到您应该只包含您需要的内容,所以我应该为每个 Web 项目创建 3 个单独的 dbcontext,否则会因包含不必要的表而影响性能。
我认为从性能角度来看这不是问题 - 但从维护角度来看我确实看到了挑战。
我遇到过类似的情况,我们有一个基于 edmx 的数据模型在不同的功能之间共享。然而,每个功能都只关注特定数量的 tables.
有了这个,每当我们需要更改任何特定于任何功能的 table 时,我们就开始面临问题,这要求我们接触一个单一的数据模型,并且还会在签入期间导致不必要的合并冲突。
A colleague mentioned [...] there will be a performance hit for including unnecessary tables
当同事说出这样的话时,你告诉他们要么用证据支持这种说法,要么闭嘴。说真的,世界上已经有足够多的货物崇拜节目了。这就像同事强迫你使用 String.Empty
因为它比使用 ""
更快,因为他们在博客上读过一次。提示:它不是。
对你听到的每一个说法进行批评是非常有益的,尤其是当该说法没有任何现实依据时。
是的,加载具有更多属性的类型将需要更多磁盘 I/O 和更多 CPU 周期。但这将是非常微不足道的。你会不会注意到这一点在大范围的事情上。*
不过,如果您使用的是 EDMX,情况就完全不同了,因为加载和解析这 5 MB 的元数据实际上会使应用程序的加载时间增加 秒 .*
*:是的,我目前正在寻找这两种说法的来源。
回答标题中的问题:不,我没有看到过大的 DbContext
会影响性能。在我工作过的一个项目中,DbContext
被定义为接近一千 DbSet
秒,配置时间(执行对 OnConfiguring
和 [=14 的调用所花费的时间=]) 大约 2 秒,每个实体都是通过 Fluent API;所以你可以说只有 35 个实体的命中可以忽略不计(如果有的话)。
也就是说,您使用一个还是多个 DbContext
取决于您将如何使用它们。如果有明确的数据分离,你可以清楚地说 "this table will only be used here" 而你最终不会重复 DbSet
,你可以将它们分开。
我正在构建一个网络应用程序,该应用程序将在一个数据库中包含 30-35 个表。现在的问题是我想将应用程序分成 3 个不同的前端(不同的团队想要不同的东西)。 3 个不同的项目。
App1 可能使用 15-20 个表,App2 可能使用 10 个,App3 可能使用 15 个。
我正计划制作一个名为 Models 的项目,该项目具有包含数据库中所有表的 dbContext,并将其用于 Web 应用程序项目。如果我需要添加或更新数据库,我可以只更新那个模型项目。
一位同事提到您应该只包含您需要的内容,所以我应该为每个 Web 项目创建 3 个单独的 dbcontext,否则会因包含不必要的表而影响性能。
我认为从性能角度来看这不是问题 - 但从维护角度来看我确实看到了挑战。
我遇到过类似的情况,我们有一个基于 edmx 的数据模型在不同的功能之间共享。然而,每个功能都只关注特定数量的 tables.
有了这个,每当我们需要更改任何特定于任何功能的 table 时,我们就开始面临问题,这要求我们接触一个单一的数据模型,并且还会在签入期间导致不必要的合并冲突。
A colleague mentioned [...] there will be a performance hit for including unnecessary tables
当同事说出这样的话时,你告诉他们要么用证据支持这种说法,要么闭嘴。说真的,世界上已经有足够多的货物崇拜节目了。这就像同事强迫你使用 String.Empty
因为它比使用 ""
更快,因为他们在博客上读过一次。提示:它不是。
对你听到的每一个说法进行批评是非常有益的,尤其是当该说法没有任何现实依据时。
是的,加载具有更多属性的类型将需要更多磁盘 I/O 和更多 CPU 周期。但这将是非常微不足道的。你会不会注意到这一点在大范围的事情上。*
不过,如果您使用的是 EDMX,情况就完全不同了,因为加载和解析这 5 MB 的元数据实际上会使应用程序的加载时间增加 秒 .*
*:是的,我目前正在寻找这两种说法的来源。
回答标题中的问题:不,我没有看到过大的 DbContext
会影响性能。在我工作过的一个项目中,DbContext
被定义为接近一千 DbSet
秒,配置时间(执行对 OnConfiguring
和 [=14 的调用所花费的时间=]) 大约 2 秒,每个实体都是通过 Fluent API;所以你可以说只有 35 个实体的命中可以忽略不计(如果有的话)。
也就是说,您使用一个还是多个 DbContext
取决于您将如何使用它们。如果有明确的数据分离,你可以清楚地说 "this table will only be used here" 而你最终不会重复 DbSet
,你可以将它们分开。