簡體   English   中英

大O運行時異常

[英]Big O Runtime of Exceptions

我有一個自定義的Dictionary<T> ,它具有KeyedCollection的后備集合。 在嘗試優化在探查器中運行時遇到的性能問題時,我注意到IndexOf(T key)是我的問題領域之一。 該代碼當前實現如下:

public int IndexOf(TKey key)
{
     if (keyedCollection.Contains(key))
     {
         return keyedCollection.IndexOf(keyedCollection[key]);
     }
     else
     {
         return -1;
     }
}

我知道Contains(T key)IndexOf(T key)都具有O(n)的big-O運行時,並且已經在MSDN站點上確認了這一點。 https://msdn.microsoft.com/zh-cn/library/ms132438(v=vs.110).aspx
我認為優化此代碼的一種好方法是刪除O(n)操作之一,因此我將代碼更改為:

public int IndexOf(TKey key)
{
     try
     {
         return keyedCollection.IndexOf(keyedCollection[key]);
     }
     catch (KeyNotFoundException)
     {
         return -1;
     }
}

當我比較這兩個大約超過500,000個操作之間的運行時時,帶有Contains(T key)的代碼執行了try-catch場景的比例接近2。

我的問題是,使用try-catch塊時是否會產生大量開銷,從而大大降低性能?

這里拋出一個異常將是O(1),因為拋出和捕獲該異常的代價絕不取決於集合的大小。 這將是固定成本。 該固定成本可能很高,但不會增長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM