Запрос памяти для вашего приложения - PullRequest
0 голосов
/ 17 ноября 2008

У меня проблема, похожая на этого человека . Основным отличием является то, что приложение НЕ предназначено для среды разработчика, и поэтому мне нужно знать, как оптимизировать пространство, используемое Sql Server (возможно, для каждой машины на основе спецификаций).

Я был заинтригован ответом Рикардо С , особенно следующим:

Извлечено с сервера SQL документация:

Максимальная память сервера (в МБ)

Указывает максимальный объем памяти, который SQL Server может выделить при запускается и пока работает. это Опция конфигурации может быть установлена ​​на конкретное значение, если вы знаете, есть несколько приложений, работающих на то же самое время, что и SQL Server, и вы хотите чтобы гарантировать, что эти приложения иметь достаточно памяти для запуска. Если эти другие приложения, такие как веб или почтовые серверы, только запрос памяти при необходимости не устанавливайте опцию, потому что SQL Server освободит память им по мере необходимости. Тем не менее, приложения часто используют любую память доступно, когда они начинают и делают не запрашивать больше при необходимости . Если приложение, которое ведет себя в этом манера работает на том же компьютере в в то же время, что и SQL Server, установите вариант к значению, которое гарантирует, что память, необходимая приложению не выделяется SQL Server.

У меня вопрос: как приложение запрашивает память у ОС, когда оно ей нужно? Это что-то встроено в компиляцию или что-то управляется разработчиком? Два основных приложения, запущенных на этом компьютере, - это Sql Server и (довольно тяжеловесное) приложение на C #, которое я разрабатываю, и я почти уверен, что мы специально ничего не делали в области запроса памяти для ОС. Есть ли правильный / необходимый способ сделать это?

Ответы [ 3 ]

1 голос
/ 17 ноября 2008

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

Многие игры делают это, так как они часто очень хорошо представляют, как будет выглядеть их модель использования памяти, и часто сильно оптимизированы. Распределитель по умолчанию / system является универсальным и не всегда достаточно быстрым. Doom сделал это , и он довольно хорошо известен, и, конечно, его код доступен и широко обсуждается.

В "управляемых" языках, таких как C #, я думаю, что это очень редко, и вам не о чем беспокоиться.

0 голосов
/ 17 ноября 2008

Это будет зависеть от нескольких вещей - в частности, от операционной системы и используемого языка.

Например, в MacOS Classic было невозможно выделить больше памяти после запуска - нам приходилось идти и изменять объем памяти, выделяемый с помощью Finder, а затем перезапускать приложение. Это были плохие старые времена.

Современные операционные системы позволяют запущенным процессам запрашивать больше памяти - например, в C вы можете использовать alloc (), malloc (), realloc () или аналогичные для запроса фрагментов памяти. В динамических языках вы просто создаете объекты или переменные, и выделяется больше памяти.

В Java есть ограничение на объем памяти, к которому у JVM есть доступ - и это можно изменить, только перезапустив JVM и передав ему некоторые аргументы (звучит как старые плохие времена, не так ли ?).

В Objective-C, помимо семейства функций malloc (), вы также можете создавать объекты в куче, используя

[object alloc]; 

, который чаще всего воспринимается как

[[object alloc] init];

Обратите внимание, что это немного отличается от создания объектов в стеке - если вы серьезно относитесь к программированию, изучение разницы между этими двумя также может быть полезным:)

В итоге - программист должен запросить у ОС больше памяти. Это может быть неявным (в динамических языках, путем создания объектов или создания объектов в куче) или явным образом, например, в C с использованием alloc () / malloc () / etc.

0 голосов
/ 17 ноября 2008

Каждый раз, когда вы создаете новый объект, вы просите сборщик мусора .NET дать вам память. Если у GC недостаточно памяти в управляемой куче, он запросит у ОС больше. Как говорит другой вопрос, хотя SQL-сервер предназначен для возврата памяти, он, кажется, не очень хорошо это делает. Здесь не будет никаких жестких и быстрых правил, вам придется угадать некоторые настройки для SQL-сервера, а затем протестировать производительность. Если вы опубликуете некоторую информацию о сервере, размере базы данных, о том, какой объем памяти требуется вашему приложению, то я уверен, что люди будут рады дать вам несколько советов для начальной конфигурации. Одно предупреждение, однако, я думаю, что изменение пределов памяти требует перезапуска службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...