Как используется память при вызове сборки .NET из веб-приложения ASP.NET и как она связана с пропускной способностью? - PullRequest
0 голосов
/ 01 марта 2010

Мое веб-приложение должно вызывать сборку .NET, которая, как мне кажется, выделяет «много» памяти для веб-приложения (возможно, я ошибаюсь, поэтому и спрашиваю).

Я уже вызываю эту сборку из своего настольного приложения и с помощью диспетчера задач понимаю, что при ее работе она потребляет около 60 МБ (хотя это быстро: для выполнения этой задачи требуется менее 0,1 секунды).

Что мне нужно знать, это то, что произойдет, с точки зрения памяти, полосы пропускания или чего-либо еще, что вы можете придумать, если, например, 10 или 100 пользователей используют мое веб-приложение одновременно. Необходимая память будет 60 МБ х (количество пользователей)? А как насчет пропускной способности?

Если вы можете подумать о других проблемах, пожалуйста, подскажите, как мне решить эту проблему.

Ответы [ 5 ]

3 голосов
/ 01 марта 2010

Пропускная способность не связана с потреблением памяти.

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

Окончательный ответ: протестируйте и узнайте!

1 голос
/ 01 марта 2010

Пища для размышления:

1) Диспетчер задач не является точным способом измерения использования памяти (например, см. http://www.itwriting.com/dotnetmem.php)

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

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

4) Пропускная способность не связана с использованием памяти.

Ключевой вопрос, на который вам нужно ответить: «Был ли компонент предназначен для работы в сети ASP.NET?среда"?На самом деле это включает в себя две отдельные, но связанные проблемы:

  • Если компонент не предназначен для работы в многопоточном режиме (если вы не знакомы с этим термином, замените «многопользовательский»), то он, вероятно, ужасно умрет, как только несколько пользователей поделятся им.

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

Я бы порекомендовал сделать следующее:

A) Прочтите документацию, чтобы увидеть, является ли она многопоточной и официально поддерживает ASP.NET

B) ПРОВЕРЬТЕ ЕГО И ВИДИТЕ ДЛЯ СЕБЯ.Создайте простое тестовое веб-приложение и подчеркните его, используя инструмент загрузки.

1 голос
/ 01 марта 2010

Память, выделенная с помощью этой сборки, будет использоваться на сервере. Он не будет передаваться через Интернет вашим конечным пользователям, поэтому пропускная способность не должна использоваться. Для использования полосы пропускания данные должны передаваться по сети. Таким образом, только если вы сериализуете структуры данных и отправляете их клиенту (возможно, в виде объектов JSON), это приведет к тому, что ваши веб-пользователи получат дополнительную пропускную способность. Любая другая передача данных через Интернет, которую выполняет сборка, повлияет на использование вами пропускной способности.

1 голос
/ 01 марта 2010

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

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

Итак, ответ: это зависит. Эта сборка также может использовать разделяемые структуры, поэтому даже ее создание несколько раз не будет эквивалентно n-кратной стоимости одной реализации.

1 голос
/ 01 марта 2010

Серьезно, нет никакого реального способа произвольно рассчитать, какое влияние окажет один добавленный пользователь на ваше приложение.

Например, хотя ваша начальная загрузка приложения будет использовать 60 МБ памяти, каждый новый пользователь может использовать всего лишь 10 КБ дополнительной памяти (содержащей только свои учетные данные пользователя) - остальные данные приложения уже будут загружены или кэшированы. Однако оно может быть выше - это будет зависеть от поведения вашего приложения.

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

Некоторые инструменты, на которые вы можете посмотреть:

Там намного больше, но это то, что я использовал для таких измерений в прошлом.

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