Я думал, что максимальное пространство пользователя для процесса на 64 бита составляло 8 ТБ, но я действительно немного тестировал, и максимум, который я мог получить, 10-11GB.
Примечание: Мне не нужно так много памяти в процессе, я просто хочу понять почему из любопытства.
Вот моя тестовая программа:
static void Main(string[] args)
{
List<byte[]> list = new List<byte[]>();
while (true)
{
Console.WriteLine("Press any key to allocate 1 more GB");
Console.ReadKey(true);
list.Add(new byte[1024 * 1024 * 1024]);
Console.WriteLine("Memory size:");
double memoryUsage = Process.GetCurrentProcess().PeakVirtualMemorySize64 / (double)(1024 * 1024 * 1024);
Console.WriteLine(memoryUsage.ToString("0.00") + " GB");
Console.WriteLine();
}
}
Править:
Обновленный тестовая программа, чтобы быть более детерминированным.
Для принятия ответа, я хотел бы знать, как реальная максимальная выделенная память вычисляется, если 8 ТБ только теоретические.
Это до 8 ТБ, а не 8 тб. Вы можете потенциально иметь до 8 туберкулезом, но вам нужна соответствующая RAM / Swapfile.
Я предполагаю, что вы используете список, который, по которому я считаю, имеет внутренний предел.
Посмотрите, что вы можете получить, если вы попробуете что-то вроде создания собственного списка старого школы:
public class ListItem<T>
{
public ListItem Parent;
public T Value;
public ListItem(ListItem<T> parent, T item)
{
this.Parent = parent;
this.Value = item;
}
}
Я написал почти этот точный код до (только мой предмет был int) и запустить его на машине с 32 процессорами и 128 ГБ ОЗУ, она всегда переплетается по тому же размеру, несмотря ни на что, и всегда было что-то связанное с Int32.maxValue, надеюсь, что поможет.
Это ваша машина.
У меня есть X64 с 8 ГБ оперативной памяти и страниц 12 ГБ, и я провел вашу программу, и он вышел на 16,23 ГБ.
EPILOG : Тогда моя Win7 устанавливает постепенно скользнув в коме, поскольку критические процессы были видимо, по-видимому, воспоминания.
Отредактируйте : Если вы хотите понять, как выделены Windows (то есть резервы и коммиты), прочитайте , нажав пределы Windows: физическая память и Нажатие пределов Windows: Virtual Память .
Поскольку .NET опирается на Windows, чтобы управлять памятью, которую он использует для создания кучи GC, механику того, как окна отражены в том, как память выделяется в .NET на низком уровне.
Попробуйте выделить один блок (в отличие от списка 1МБ блоков):
Dim p As IntPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(New System.IntPtr(24 * (1024 ^ 3)))
Правка - Учитывая ваш комментарий, что у вас всего 4 ГБ физической оперативной памяти, у вас действительно нет бизнес выделения > ~ 8ГБ, и даже это нажимает на него.
Edit -
Чтобы принять ответ, я хотел бы знать, как вычисляется реальный максимальный объем выделяемой памяти, если 8 ТБ - это только теоретические данные.
Максимальный объем выделяемой оперативной памяти, вероятно, эквивалентен (Page File Size - Размеры всего в оперативной памяти , за исключением того, что не может или не будет выводиться на страницу) + (Physical RAM Size - Размер всего, что не может или не будет выводиться на страницу, т.е. того, что необходимо для поддержания работы вашей системы... ядра, драйверов, .net вещей и т.д...)
Конечно же, файл страницы может расти.....
Рано или поздно страниц на диск или с диска становится очень много, и ваша система замедляется до ползучести и становится непригодной для использования.
Читайте блог Марка Руссиновича: