ลองนึกภาพรหัส:
public class obj
{
// elided
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
วิธีที่ 1
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
วิธีที่ 2
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
ฉันอยากรู้ว่าประสิทธิภาพการทำงานของทั้งสองฟังก์ชั่นแตกต่างกันหรือไม่เพราะฟังก์ชั่นแรกควรช้ากว่าฟังก์ชั่นที่สองเนื่องจากต้องตรวจสอบสองครั้งหากพจนานุกรมมีค่าในขณะที่ฟังก์ชั่นที่สองจำเป็นต้องเข้าถึงพจนานุกรมเท่านั้น ครั้งเดียว แต่ว้าวมันตรงกันข้ามจริงๆ:
วนซ้ำสำหรับค่า 1,000,000 (มี 100,000 ที่มีอยู่และ 900,000 ที่ไม่มีอยู่):
ฟังก์ชั่นแรก: 306 มิลลิวินาที
ฟังก์ชั่นที่สอง: 20483 มิลลิวินาที
ทำไมถึงเป็นอย่างนั้น?
แก้ไข: ในขณะที่คุณสามารถสังเกตเห็นในความคิดเห็นด้านล่างคำถามนี้ประสิทธิภาพของฟังก์ชั่นที่สองจริง ๆ แล้วดีกว่าหนึ่งในกรณีที่มี 0 คีย์ที่ไม่มีอยู่ แต่เมื่อไม่มีคีย์อย่างน้อย 1 คีย์ขึ้นไปประสิทธิภาพที่สองจะลดลงอย่างรวดเร็ว
O(1)
การค้นหาในพจนานุกรม ... โดยเฉพาะอย่างยิ่งนับตั้งแต่การทำสองO(1)
การดำเนินงานยังคง O(1)
asymptotically
ContainsKey
นี้O(1)
... คาดว่า