1

Мне хотелось бы узнать, можно ли явно указать, какой тип памяти (физическая или виртуальная память) должен использоваться приложением C# для выполнения разных действий? Позвольте мне объяснить это на примере:Ручное управление распределением памяти в C#

Допустим, у меня есть файл размером около 100 или 200 МБ. Мне нужно проанализировать этот файл, получить доступ и проанализировать его содержимое и выполнить операции над содержимым файла. Возможно ли, чтобы я мог хранить весь файл и его содержимое в виртуальной памяти вместо физической памяти?

Если возможно, есть ли какие-либо побочные эффекты/меры предосторожности, которые следует иметь в виду?

Причина моего вопроса заключается в том, что мне часто приходится иметь дело с такими огромными файлами или наборами данных (извлекаемыми из баз данных) и выполнять операции над ними, часть которых не обязательно должна выполняться последовательно или быть синхронизирована. Я хочу улучшить время выполнения и производительность приложения, если возможно, распараллеливая несекретные части.

+1

Для этого вы можете использовать файлы с отображением памяти, но контроль над тем, где вы фактически загружаете объекты в память, находится вне вашего контроля. –

ответ

2

Как правило, вам не нужно (и не нужно) знать, как управлять физической памятью. В Windows и, следовательно, в CLR все это виртуальная память.

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

Вы можете зависеть от операционной системы, чтобы разумно определить, что должно храниться в физической памяти и что можно поменять местами. Переключение происходит только в том случае, если есть давление памяти, т. Е. Если вы выделяете больше памяти, чем физически доступно.

Кроме того, сегодня 100-200 МБ не так уж много.

2

физической или виртуальной памяти

Вы не можете на самом деле читать из виртуальной памяти. Когда вы пытаетесь это сделать, возникает ошибка страницы, и ОС сделает page swap и вернет эту виртуальную память в физическую память. Таким образом, вы читаете только физическую память. При обмене страницей он выберет страницу из ОЗУ, которая не использовалась в последнее время.

С точки зрения приложения, все выглядит в физической памяти. Вам не нужно беспокоиться о том, какие страницы находятся в физической памяти или из нее, ОС справится с этим.

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