回答
FUNC <>是委託類型,一個實例需要32個字節的存儲空間在x86抖動:用於Delegate._methodBase字段
- 8字節爲目標首標的
- 4字節
- 4個字節用於Delegate._methodPtr字段
- Delegate._methodPtrAux字段的4個字節
- 4個字節用於Delegate._target字段
- 4個字節用於MulticastDelegate._invocationCount字段 爲MulticastDelegate._invocationList字段
目標方法大小
這個問題在很多層面上都有答案,我擔心你不會得到一個真正的100%準確的答案,但是在這裏。
有兩種不同的內存條我想在這裏重點:
- 分配給持有
- 的內存分配代碼
第一個代碼中的內存一塊是由JITter分配的,這肯定與該方法中的代碼量有關。但是,如果您決定將這種方法分散在多種方法中(您應該這樣做,一種方法不應該是一千行,更不用說50),那麼您也將通過這些方法分散內存。實際上,每種方法可能會有一定的開銷,所以有鑑於此,如果使用更多的方法而不是一個大的方法,它可能會最終爲JITted代碼使用更多的內存,但這是無關緊要的。拆分它。認真。
第二塊內存是代碼在執行時分配的任何內容。這當然完全取決於代碼的作用,所以沒有辦法說一種方法比另一種方法更好地僅根據行數來判斷。 1000行方法可能分配不多,而1行方法可能分配很多。除了通過檢查實際的代碼之外,沒有辦法告訴。
此外,在調試器外部運行的發佈模式構建中,垃圾收集器非常具有侵略性,因此在方法的頂部聲明瞭一個變量,填充了一個數據結構,然後在該方法因爲它可以鳥瞰你的代碼,所以GC可以回收它。它可以「看到」該變量不再被使用,因此收集其中的任何內容是安全的。
但是,在調試期間,該變量的生命被人爲地延長到了範圍/方法的末尾,因此,如果您停止程序中不再使用該變量的那部分代碼的某個地方,您仍然可以檢查其內容。
因此,得出結論:
- 更長的方法可能會需要更多的即時編譯的內存比一個更短的方法來保存,但是除非你其實可以刪除代碼,而不是僅僅移它周圍,分裂起來,這是不相關的。 寫簡短的方法。
- 該方法分配的內存與行數無關,而與這些行的內容無關。
現在,至於System.Func<T...>
,這只是一個指向小對象的指針。該對象的大小將取決於參數的數量(如果我正確地記得)它所引用的func /方法,但除此之外,它不依賴於方法,代碼或內存分配或內存的大小。
正如@Marc指出的那樣,.NET中的委託是啓用多播的。這是使用一系列對象解決的,所以使用的內存也將取決於該鏈中元素的數量。
不要擔心使用代表。它們相當便宜,無論是CPU還是內存方面。
另外;認爲「多播」 – 2011-04-23 18:05:54
啊,是的,忘了這一點。 – 2011-04-23 18:43:38
System.Func
僅僅是一個代表,它把簡單地保持指針的功能的列表,以便由System.Func
佔用的存儲器的量是相對於分配給它無論函數的大小的函數代表的多個恆定它實際上指向。
另一方面,它自身的函數會根據代碼的物理行和代碼實際執行的操作而具有不同的內存要求。後者是您應該關注的已實現函數的內存分配要求和算法效率。
我不知道有多少幫助,但利用這一點,我們可以知道一個進程
int memory;
Process[] application;
application = Process.GetProcessesByName("MyApplication.exe");
applicationMemory = application[0].PrivateMemorySize;
Console.WriteLine("Memory used: {0}.", applicationMemory);
不,我不認爲有什麼區別要麼有1個或1000的內存使用情況線。你可以使用這個分析器。下載你的工具包分析器並附上你的應用程序,之後你可以看到你的代碼的內存使用情況,我認爲這對你有幫助...................
- 1. icCube內存 - 需要多少?
- 2. Tomcat線程需要多少內存?
- 3. 測量程序需要多少內存
- 4. 一個ViewController需要多少內存?
- 5. jekyll進程需要多少內存?
- 6. Java需要啓動多少內存?
- 7. 構建docker需要多少內存v1.9.0
- 8. MySQL不斷用Wordpress運行內存,我需要多少內存?
- 9. 有多少內存需要neo4j來存儲關係?
- 10. 需要多少跳?
- 11. C/C++程序使用多少內存
- 12. 我需要爲VPS購買多少內存?
- 13. 需要在JMeter中設置多少內存(堆大小)
- 14. 需要多少內存和時間來填充Java列表
- 15. JVM需要分配一個字符數組到多少內存?
- 16. ios - 如何計算UIView動畫需要多少內存?
- 17. Java界面需要多少空間(二進制/內存)?
- 18. iOS應用程序需要多少內存
- 19. JDOM需要多少「開銷」內存來生成XML文件?
- 20. 共享Magento開發環境需要多少內存?
- 21. 當使用new int [10]時元數據需要多少內存?
- 22. Android中的RGB_565位圖 - 它需要多少內存?
- 23. 我的iPhone應用程序需要佔用多少內存?
- 24. 這樣的東西需要多少內存?
- 25. 權重需要多少個字節的內存?
- 26. TensorFlow:如何測量每個張量需要多少GPU內存?
- 27. 計算一個程序(計劃中)需要多少內存
- 28. 開發Android應用時,您的應用需要多少內存?
- 29. Swagger API「需要」 - 需要多少錢?
- 30. 我需要多少位來存儲AB + C?
System.Func只是一個指向編譯代碼的指針。爲了得到一個大概的想法,在添加代碼之前和之後查看DLL的大小。 :) – 2011-04-23 17:52:54