Могу я (и я когда-либо хочу к), устанавливает максимальный размер "кучи" в .NET?

Вот модель, использующая делегирование события и атрибут data для связывания большого пальца и основного изображения.

// This clears down any image showing already
const hideAll = () => document.querySelectorAll('#sliderImages div').forEach(d => d.classList.remove('active'));

// Show the actual image we want by adding a class
const showSlide = (id) => document.querySelector(`#sliderImages div[data-image-id="${id}"]`).classList.add('active');

// Event delegation model means we can add new thumbs and they will just work.
document.addEventListener('mouseover', (e) => {
  if (e.target.matches('.thumbnail__img')) {
    hideAll();
    showSlide(e.target.dataset.imageId);
  }

});
.slider__container {
  font-weight: bold;
  border: 1px solid red;
  min-height: 150px;
}

.slider__img {
  display: none;
}

.active {
  display: block;
}
<div class="slider">
  <div id="sliderImages" class="slider__container">
    <div class="slider__img" data-image-id="1">Big image 1</div>
    <div class="slider__img" data-image-id="2">Big image 2</div>
    <div class="slider__img" data-image-id="3">Big image 3</div>
    <div class="slider__img" data-image-id="4">Big image 4</div>
    <div class="slider__img" data-image-id="5">Big image 5</div>
    <div class="slider__img" data-image-id="6">Big image 6</div>
    <div class="slider__img" data-image-id="7">Big image 7</div>
  </div>
  <div id="sliderNav" class="slider__navigation" data-relative-input="true">
    <a href="#" class="thumbnail" data-depth="0.2">
      <div class="thumbnail__img" data-image-id="1">Thumb 1</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.4">
      <div class="thumbnail__img" data-image-id="2">Thumb 2</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.6">
      <div class="thumbnail__img" data-image-id="3">Thumb 3</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.8">
      <div class="thumbnail__img" data-image-id="4">Thumb 4</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.6">
      <div class="thumbnail__img" data-image-id="5">Thumb 5</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.4">
      <div class="thumbnail__img" data-image-id="6">Thumb 6</div>
    </a>
    <a href="#" class="thumbnail" data-depth="0.2">
      <div class="thumbnail__img" data-image-id="7">Thumb 7</div>
    </a>
  </div>
</div>

27
задан serg10 19 November 2008 в 09:32
поделиться

4 ответа

Вы не можете установить макс. размер "кучи" в.Net, если Вы не размещаете CLR сами в процессе.

Редактирование: Для управления выделениями памяти CLR включая макс. размер "кучи" необходимо использовать API хостинга, чтобы разместить сброс и конкретно использовать "Интерфейсы диспетчера памяти", некоторая информация о начинающем может быть найдена здесь MSDN Magazine, столбец CLR Inside Out: API Хостинга CLR

Редактирование: для ответа Вы подвергаете сомнению, почему был бы Вы хотеть управлять выделением памяти или специфически макс. размером "кучи", Вы обычно не хотите, но , если Вы пишете приложение, которое похоже на SQL Server или IIS или некоторое приложение реального времени тогда, у Вас было бы довольно серьезное основание управлять памятью, и конкретно избежать подкачки страниц, иначе сам CLR и ОС уже делают довольно хорошее задание для Вас, и что оставляют, должен гарантировать Ваш, что приложение использует минимальные ресурсы для вещей работать хорошо.

23
ответ дан 28 November 2019 в 05:10
поделиться

Нет, это не применяется в.NET. "Куча" действительно продолжает расти, пока это не может больше расти. (Очевидно, это "после пытается восстановить память через GC, вырастить "кучу"".) В основном нет почти такой же настройки, доступной в GC.NET как в Java. Можно выбрать GC сервера или клиент один, и я думаю, что существует опция для превращения включения - выключения параллельный GC (я найду ссылки через минуту), но это - в основном он.

РЕДАКТИРОВАНИЕ: кажется, что существует немного больше к нему, хотя не огромная сумма. запись в блоге Rick Minerich на настройках и GC последующая , кажется, знает скорее больше, чем я делаю о вопросе. Они - вероятно, хорошая начальная точка для дальнейшего расследования - но они - главным образом флаги, а не вид пределов памяти, доступных в JVMs.

РЕДАКТИРОВАНИЕ: ответ Поп поднимает положительный вопрос - я принимал "нормальную" модель хостинга CLR (т.е. не под Вашим управлением). Если Вы захотите перейти к усилию по хостингу его сами, Вы, вероятно, получите намного больше контроля - за счет дополнительной работы хостинга его. Я не могу сказать, что когда-либо изучал ту сторону вещей.

14
ответ дан 28 November 2019 в 05:10
поделиться

Вы могли бы хотеть посмотреть Система. Время выполнения. MemoryFailPoint.

7
ответ дан 28 November 2019 в 05:10
поделиться

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

Ссылка выше отвечает на вопрос только наполовину. Когда я исследовал эту же проблему, я получил ответ: «Куча растет, чтобы использовать всю доступную память», как будто это единственная причина, по которой вы хотите контролировать максимальный размер кучи.

В (обычно Java) серверных средах , вы не хотите, чтобы плохо работающее приложение занимало память за счет других размещенных приложений. Простое решение - ограничить объем памяти, который приложение может использовать для своей кучи. Это достигается с помощью аргумента Java -Xmx, поэтому вы можете гарантировать, что приложение не будет использовать больше запланированного, например -Xmx256M. Поскольку выделение памяти в куче во время инициализации может замедлить запуск приложений, Java использует аргумент -Xms, чтобы позволить приложениям, которые создают большое количество объектов во время инициализации, начинать с большого блока кучи вместо того, чтобы JVM постоянно изменяла размер кучи по ходу работы.

CLR .Net не имеет такой возможности. Я подозреваю, что это потому, что .Net CLR не является виртуальной машиной. CLR - это API (довольно всеобъемлющий, я могу добавить), который служит адаптером для собственных .dll, что приравнивается к подходу, который больше похож на исполняемый файл, когда дело доходит до управления памятью.

Я задал этот вопрос о разработке SharePoint и слышали, что можно управлять размером кучи с помощью модулей IIS, называемых веб-приложениями, с помощью которых вы можете указать IIS ограничить память данного веб-приложения. Интересно, связано ли это с тем, что IIS имеет настроенные процедуры, которые заменяют / переопределяют new () / malloc () / etc и, таким образом, могут предоставлять этот тип управления клиентским приложениям. Это означает, что автономным приложениям .Net не повезло, если вы не хотите написать собственный диспетчер памяти на C ++ и создать интерфейс для .Net

5
ответ дан 28 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: