2010-05-28 72 views
1

我做到了这一点。这是找到我的DateTime集合的最新DateTime的最快方法吗?比较最快的方法对象类型DateTime

我想知道是否有一种方法,我正在做的内部foreach,但即使有,我不知道它是如何可以比我所有准备得到更快。

List<StateLog> stateLogs = db.StateLog.Where(p => p.ProductID == product.ProductID).ToList(); 
       DateTime lastTimeStamp = DateTime.MinValue; 

       foreach (var stateLog in stateLogs) 
       { 
        int result = DateTime.Compare(lastTimeStamp, stateLog.TimeStamp); 
        if (result < 0) 
         lastTimeStamp = stateLog.TimeStamp; // sæt fordi timestamp er senere 
       } 

回答

0

你不能让它更快,它本质上是一个O(n)算法。

2

您可以使用自己的重载运算比较DateTime S:

foreach (var stateLog in db.StateLog.Where(p => p.ProductID == product.ProductID)) 
{ 
    if (lastTimeStamp < stateLog.TimeStamp) 
     lastTimeStamp = stateLog.TimeStamp; // sæt fordi timestamp er senere 
} 
+0

永远不要低估JIT编译器。它在Release版本中生成*完全相同的代码*。先测量一下。 – 2010-05-28 00:40:26

+0

@Hans:JITter如何优化“比较”调用? – SLaks 2010-05-28 00:42:24

+0

它内联。就像它内联运营商<过载呼叫。 – 2010-05-28 00:49:58

0
stateLogs.OrderByDescending(s=>s.TimeStamp).First(s=>s.TimeStamp) 

假设条件是,stateLogs是一个非空的集合。

另外,更快的方法是:

stateLogs.Max(s=>s.TimeStamp) 

,但我不知道它会超越一个手卷循环。

+0

这实际上比较慢。 – SLaks 2010-05-28 00:14:15

+0

Bah。错过了“优化”位。不理我! – spender 2010-05-28 00:15:19

+0

新增了第二种方法。 – spender 2010-05-28 00:20:40