有人向我建議,.NET 4.0中的內置函數緩存了它的結果,所以如果我一遍又一遍地調用Math.Sqrt(50)
,它實際上並不是在執行sqrt,而只是從緩存中提取答案。任何人都可以驗證或否認這一說法?如果這是真的,那麼我的代碼中會有一堆不必要的緩存。Math.Sqrt緩存自己的結果嗎?
2
A
回答
0
我沒有安裝.net 4,但您可以通過在反射器中查看上述方法輕鬆地進行驗證。
這是您確定會看到發生的唯一方法。
1
我不這麼認爲。
您可以嘗試做一個基準測試,在1000.000個不同的號碼上撥打Math.Sqrt
,然後在1000.000個相同的號碼上,所用的時間應該相似。
你可以看看反射器,它可以揭示你的功能代碼(至少是非管理部分)。
如果你需要一個緩存,你應該創建一個你自己的某種散列表。 請注意,您應該留下一個小數,例如1.0000000應該與1.00000001相同,否則您會因準確性而陷入困境。
相關問題
- 1. Facebook有自己的緩存嗎?
- 2. 緩存WorkerRole可以添加到它自己的緩存中嗎?
- 3. Linq緩存多個Froms的結果嗎?
- 4. 緩存結果()
- 5. 應該緩存getSystemService(...)結果嗎?
- 6. @properties裝飾器緩存結果嗎?
- 7. RabbitMQ緩存結果?
- 8. 緩存LINQ結果
- 9. 緩存eval()結果
- 10. 緩存ajax結果
- 11. 多緩存可以有自己的etags標記堆棧嗎?
- 12. 可以/我應該使用ConcurrentMap和我自己的緩存嗎?
- 13. 緩存結果的功能?
- 14. 緩存XMLHttpRequest的結果?
- 15. 緩存MethodHandles.lookup()的結果?
- 16. Oracle 10g的結果緩存
- 17. Android ListView - 做我自己的緩存
- 18. 從GeoPlugin緩存IP結果PHP結果
- 19. symfony:配置緩存自己的緩存類
- 20. 在自己內部使用自己的結果的SQL查詢
- 21. Ruby會緩存將評估爲相同結果的方法的結果嗎?
- 22. Memcached/XCache緩存SQL結果?
- 23. 緩存PHP MySQL結果
- 24. 緩存linq-to-sql結果?
- 25. 緩存SQL結果集
- 26. 緩存查詢結果
- 27. Rails緩存ActiveRecord結果
- 28. Redis緩存MYSQL結果
- 29. UserNamePasswordValidator和緩存結果
- 30. 緩存SHOUTcast API結果
我實際上在ildasm和.net反射器中檢查了這一點。看起來,.NET級別沒有緩存,因爲兩者都表明Math.Sqrt實際上是一個外部調用。 – 2010-06-16 14:35:15
你不能看到這個使用反射器,因爲它是一個外部調用。您可以從Microsoft下載[共享源參考實現]的源代碼(http://www.microsoft.com/downloads/details.aspx?FamilyID=8c09fd61-3f26-4555-ae17-3121b4f51d4d&displaylang=en)並查看那裏。您會看到'Math.Sqrt'只是對C++ math.h中'sqrt()'函數的調用。 – 2010-06-16 14:55:27