gpt4 book ai didi

c# - LINQ 传递 UTC 日期还是使用 DateTime.UtcNow?

转载 作者:太空狗 更新时间:2023-10-29 21:50:14 26 4
gpt4 key购买 nike

我有一个 Entity Framework 查询,其条件如下:

var filtered = collection.Where(sp => sp.SubscriptionStartDate < DateTime.UtcNow && 
sp.SubscriptionEndDate >= DateTime.UtcNow)

对比

var currentUtcDate = DateTime.UtcNow;
var filtered = collection.Where(sp => sp.SubscriptionStartDate < currentUtcDate &&
sp.SubscriptionEndDate >= currentUtcDate)

第一个将转换为 SYSUTCDATETIME(),另一个将通过参数传入日期。我一直在做第二种情况,使两种情况下的日期完全相同,并且不会相差纳秒,但我正在做这个假设。

这是否会影响性能,因为我每次运行时都会将不同的参数传递给查询?哪个是最佳做法?

最佳答案

尽可能多地,我总是尝试将日期设置和日期检查推送到数据库,因为我的项目中有多个软件正在访问数据库,但没有一个只有一个软件软件访问不同机器上的数据库,其中这些数据库没有保持同步(例如,如果数据库是负载平衡的)。 (或者我实际上并不关心时间戳的地方)。

因此,数据库一直是 One-True-UTC-to-Rule-them-All 可以生存的明显地方。

这也让我在触发器、列默认值、带外操作的清理代码等方面具有更大的灵 active 。

但是,其他应用程序可能恰恰相反,一个应用程序使用多个完全独立的数据库。

如果(这是最常见的)我有一个应用程序和一个数据库,即使它们在同一台机器上运行,数据库仍然是唯一的时间提供者。通常,这样的系统更容易变成单数据库、多应用程序的情况,而不是变成单应用程序、多数据库。 (同样,我没有计算数据库发生集群或负载平衡的情况;我解决了使它们分别保持同步的问题,因此就外部而言,它们仍然是单个数据库)。

无论哪种方式,基本原则是假设只有系统的一部分知道现在几点,至少对于与这两部分相关的事情(如果应用程序做其他与时间无关的事情)实体,那么合理数量的同步就足够了)。

总结:

  1. 多个应用,单个数据库:使用数据库上的时间。 (代码示例 1)
  2. 单个应用,多个数据库:使用应用中的时间。 (代码示例 2)
  3. 单个应用程序,单个数据库:使用数据库上的时间(因为您更有可能演变成情况 1 而不是情况 2)。
  4. 多个应用程序,多个数据库:这样一个广泛分布的系统需要以非常稳健和容错的方式将时间规则内置到设计中,我不能只提出一个或另一个来回答,尽管我会与第二种方法相比,我仍然更有可能将我的解决方案基于第一种方法。

至于性能,这些问题非常微不足道。一个会比另一个快,因为在现实世界中任何两件事都需要时间,一个比另一个快,但它可能不会一致,而且很可能会在很小的程度上你不会在意的。如果您在给定查询中有大量 此类参数,这可能会开始变得重要,但如果它确实开始变得重要,您将需要检查并找出哪个更适合您,而不是而不是一些计算机科学理论来了解哪种方法在大多数情况下对普通开发人员更有效。您还可能希望进一步改变方法,以避免首先出现大量数据。

关于c# - LINQ 传递 UTC 日期还是使用 DateTime.UtcNow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com