2010-05-28 83 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