2009-06-10 72 views
3

我目前正在C#中設計一個網站,它使用一些非常複雜的代碼來生成一個搜索列表,我目前將其設計爲一個樹狀結構。字典的大小

我使用樹的主要原因是這個網站是高流量的,並且有一個非常複雜的搜索過濾器,這意味着可伸縮性非常重要,但是我擔心樹的內存需求可能超過每次簡單重新計算值的有效處理要求。

有沒有人知道一個可靠的方法來測量C#字典的大小? Marshal.SizeOf()方法不會允許這樣做,因爲代碼不是非託管的。

乾杯,埃德

做...的元素任意數量的初始化樹,衡量的過程中消耗的內存大小,增加1000個新的元素,再次測量內存大小
+0

+1我有同樣的問題:HTTP:// stackoverflow.com/questions/751710/how-to-find-out-size-of-asp-net-session-when-there-are-non-serializable-objects – 2009-06-10 11:02:38

+1

考慮使用內存分析器;它的目的是幫助你分析你對內存的使用。 http://msdn.microsoft.com/en-us/library/ms979205.aspx – 2009-06-10 15:03:43

回答

3

最好的辦法是在不同型號的網站上運行加載,並檢查the relevant performance counters

作爲一種簡化,您可以只提取創建和存儲數據結構的代碼,並將其嵌入到控制檯應用程序中。運行模擬負載並檢查那裏的性能計數器。您可以改變事物並衡量對內存消耗和垃圾收集的影響。這樣做會隔離你想測量的效果。

如果你想「哎呀,這聽起來像很多工作,」那麼你最好是購買更多的內存。

0

的一種方式,減並劃分。

+0

我認爲這對我的老闆有點太不準確,儘管這是一個可行的選擇 – 2009-06-10 11:14:48

0

您可以使用單個字典創建一個小應用程序,然後使用WinDbg或ClrProfiler在幾種情況下分析它。 (?使用反射raversing內部字段分開)

我不認爲有一種方法來獲取對象的總規模在運行時