我的目標是達到填滿所有可用內存的一個點(請注意,我希望以增量方式執行此操作,因此在最後一次分配之前我只剩下最少的內存)。我怎樣才能做到這一點?C#:用完幾乎所有的內存
回答
一個選擇是創建某種類型的列表,並在一個無限循環中繼續添加垃圾。
雖然這可能需要一段時間,但這可能需要一段時間 - 加速它的一個選項是最初在列表元素中添加大型結構,然後捕獲OutOfMemoryError並以較小的內容再次嘗試,直到得到您需要的精度。
我覺得這種方法可能存在問題。我認爲List <>類每增加一次內部存儲就會增加一倍 - 這意味着在最糟糕的情況下,在拋出異常之前,你只能使用略多於一半的可用內存。我很高興被證明是錯誤的 - 或者這對傑克的情況來說足夠好。 – Ant 2009-12-16 09:09:44
如果鏈接列表在每次增長(甚至是暫時)時都將其存儲需求翻倍,那麼這是最糟糕的鏈表實現。 – 2009-12-16 18:46:41
也許這樣的事?
var bytes = new List<byte[]>();
var time = new TimeSpan(100);
while (true)
{
bytes.Add(new byte[1024]);
Thread.Sleep(time);
}
在while循環中向內存流中添加大緩衝區。
for (object[] o = null;; o = new[] { o });
如果這真的有效..它是討厭的...:P – 2009-12-16 01:49:40
是的,它的工作原理!事實上,它工作得很好,它使Visual Studio 2008崩潰(在調試器下運行時)。 – EMP 2009-12-16 07:45:14
Pavel Minaev你會介意向我解釋這段代碼的工作原理嗎?我剛剛遇到了這個,並嘗試過,現在我很好奇。 – 2016-01-12 02:30:59
的LINQ方式:
Enumerable.Range(0, int.MaxValue).ToArray();
除了它失敗或成功,但最有可能失敗分配一個單一的大陣列。 – 2009-12-16 07:27:00
是的,這個在使用完所有可用RAM之前會拋出OutOfMemoryException。 – EMP 2009-12-16 07:46:42
int size = 1024;
var bytes = new List<byte[]>();
while (true)
{
try
{
bytes.Add(new byte[size]);
}
catch
{
if (size == 1)
{
throw;
}
size = size/2;
}
}
你正在談論喜歡它的聲音場景可能是用於測試的應用程序。
您可能想要查看負載/壓力測試工具。 LoadRunner是第一個想到的。它不是「用C#編寫的」,我很確定它不是免費的,但它可能是正確的工具。另外,如果您希望查看的是您的程序如何處理OutOfMemory異常,則可能需要查看故障注入。
對於究竟你問什麼,這裏有消耗內存的應用程序的文章: http://msdn.microsoft.com/en-us/magazine/cc163613.aspx
var junk = new LinkedList<byte[]>();
int allocSize = 100 * 1024 * 1024; // 100 MiB
while (allocSize > 0)
{
try
{
junk.AddLast(null);
junk.Last.Value = new byte[allocSize];
}
catch (OutOfMemoryException)
{
allocSize = (allocSize - 1)/2;
}
}
- 1. (幾乎)所有的垃圾收集都是完整的收集
- 2. 幾乎所有的動畫在ios5
- 3. Cygwin幾乎所有包的缺席
- 4. Android:GridView顯示幾乎所有的圖像
- 5. mysql(幾乎)完成審計
- 6. 爲什麼有人會使用printf()幾乎所有的原因?
- 7. 格蘭特[幾乎]所有MySQL權限爲所有,但一個/幾張桌子
- 8. LibGdx中幾乎完美的碰撞Java
- 9. Gauge.js幾乎完整的圈子
- 10. - (void)drawRect:(CGRect)rect;使用了幾乎所有的iPhone CPU的
- 11. DATETIME col用於幾乎所有SELECT操作的表的主鍵
- 12. C++ OIS Segfault幾乎完全相同的功能工作
- 13. ASP.Net MVC:幾乎所有頁面都使用的下拉列表
- 14. CPU使用率過高,幾乎所有的阻塞狀態
- 15. 防止Android ListView佔用幾乎所有的屏幕高度
- 16. 處理幾乎是在C++
- 17. Django ModelFormSet用完了我所有的內存嗎?到內存泄漏的類似
- 18. NSOperationQueue似乎掛起完成幾秒鐘
- 19. Makefile Makeover - 幾乎完整,想要反饋
- 20. Java計算器幾乎完成
- 21. 計算表格需要幾乎完整
- 22. 是否有可能將BDD納入幾乎完成的項目?
- 23. 幾乎有:完全平滑的梯形與CSS技巧
- 24. 日曆項目幾乎在C中完成
- 25. C編程 - 做循環幫助(代碼幾乎完成)
- 26. 在gcc中禁用幾乎所有警告
- 27. 幫助與JQuery的自動完成 - 幾乎完成
- 28. jQuery的未檢測(幾乎)所有的部分元素
- 29. C++對幾乎繼承的函數進行內聯
- 30. C程序 - 迴文功能 - 幾乎完全完成一個小問題
解釋你想達到這樣做呢? – 2009-12-16 01:43:10
我認爲他在做實驗。我想知道是否有一個不引發OutOfMemoryException的解決方案不會檢查剩餘的可用內存。 – 2009-12-16 01:55:57
@Jader:你想要一些東西來消耗所有的記憶,而沒有任何手段知道什麼時候發生了? – 2009-12-16 01:59:47