2012-02-21 3 views
2

Я хочу написать приложение, которое потребляет много памяти на сервере, чтобы отображать проблемы, связанные с давлением памяти на сервере. Я знаю C# довольно хорошо, но мне любопытно, что самый эффективный способ заставить приложение потреблять чрезмерное количество памяти управляемым образом. Например, я хотел бы иметь возможность передать параметр, который говорит, чтобы потреблять x МБ памяти и использовать его где-то рядом с этим значением. Любые мысли о том, как я могу это сделать, будут очень признательны.Создание приложения для потребления памяти

+0

В зависимости от действительности производительность может вести себя по-разному при различном использовании памяти. Выделение одного большого chunck может иметь другое влияние, чем распределение многих небольших кусков. Если вам нужен хороший тест, вы должны проверить оба. При распределении памяти через GC на C# вы не можете реально управлять основной памятью, которая потребляется. Выделение напрямую (вызов Marshall.Alloc ...) было бы одним из способов. – Polity

+0

Вы всегда можете реализовать алгоритм трассировки лучей и загружать тонны геометрии. Это будет потреблять память быстро и жестоко. – user18490

ответ

3

Не самый простой способ - просто создать массив байтов интересующего вас размера. Чтобы получить очень большие выделения, вам может понадобиться использовать несколько массивов, используя эту технику.

Кроме того, если вы так inclinded вы могли п/ссылаться на VirtualAlloc

Если вам просто нужно приложение, которое вы могли бы также использовать Testlimit от Sysinternals. Эта утилита использовалась в замечательной серии Pushing the Limits of Windows Марка Руссиновича.

+0

Это была моя первая мысль, но потом я второй догадался, действительно ли это может быть так просто? –

+0

Да, вы должны иметь возможность использовать 'GC.GetTotalMemory' до того, как после выделения, чтобы увидеть разницу –

+0

Существует ограничение на то, что я могу выделить, не получая это 'System.OutOfMemoryException'. Попытка перепрыгнуть через 1 ГБ всегда приводит к исключению. Я мог бы развернуть несколько копий приложения, чтобы получить желаемый эффект, но если есть работа для этого, чтобы получить большое выделение памяти размером 4-8 ГБ, это было бы лучше всего. –

2

В зависимости от того, что «давление памяти» вы ищете: вариант BURNMEMORY

  • boot.ini - http://support.microsoft.com/kb/833721 действительно ограничить объем доступной памяти.
  • создайте программу, которая просто выделяет большой объем памяти и активно затрагивает ее. Таким образом, вы можете увидеть, как ваша другая программа реагирует на медленность распределения/использования памяти.
  • выделить память в интересующем вас процессе, чтобы создать давление на адресное пространство (32-бит в основном).
2

Одним из способов сделать это может быть массив байтов. Преобразуйте свое входное значение из MB в байты, а затем выделите массив. Если вы хотите попробовать прямое распределение стека, вы можете использовать stackalloc.

Смежные вопросы