Брак пам'яті винятків у керований застосунок, який працює під керуванням 64-розрядної .NET Framework

ВАЖЛИВО! Ця стаття перекладена засобами машинного перекладу Microsoft. Статтю можна редагувати в середовищі Community Translation Framework (CTF). Щоб якомога швидше перекласти всі статті у своїй базі знань різними мовами, компанія Microsoft не лише звертається до професійних перекладачів, але й вдається до машинного перекладу, який потім редагується спільнотою. Такі статті можуть містити лексичні, синтаксичні та граматичні помилки. Microsoft не несе відповідальності за будь-які неточності, помилки або збитки, до яких може призвести неправильний переклад статей або їх використання. Докладніше про CTF див. на веб-сторінці http://support.microsoft.com/gp/machine-translation-corrections/uk-ua.

Клацніть тут, щоб переглянути цю статтю англійською мовою: 3152158
Ознаки
Ви маєте це керований застосунок, який застосовує Microsoft .NET Framework 64-розрядних 4.6.1. Ця програма кидки виняток брак пам'яті, з загальномовне середовище виконання певних таке повідомлення:

OutOfMemoryException: "недостатньо пам'яті в діапазоні вказану адресу місця, для продовження виконання програми."
причина
Цей виняток, брак пам'яті поширюється загальномовне середовище виконання після того, як Диспетчер підсистеми коду неможливо виділити пам'ять, що в діапазоні конкретну адресу місця, для переходу статті. (Ці переходів статті відповідати методу, який викликає серед DLL-файли, які зберігаються в 2 ГБ або більше відстані адресного простору.) Має бути простору в межах 2 Гб, виклик методу для онлайнове пул носіїв заглушка переходів, для 64-розрядних метод. Немає безпечного способу для застосування в цієї конкретної помилки. Таким чином, стану після того, як вона виникає така помилка застосунку невідомо, і слід вважати пошкоджено. Єдиний спосіб відновлення є перезапуску.
Обхідний шлях
Щоб вирішити цю проблему, скористайтеся одним із наведених нижче способів для налаштування
  • Здійснити настройки комп'ютера рівні, додавши такий розділ реєстру а значення:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

    NGenReserveForjumpStubs= dword:00000005

  • Здійснювати на рівні застосунку настройки, додавши (або об'єднання) у цьому розділі, до файлу конфігурації застосунку:
    <configuration>    <runtime> <NGenReserveForJumpStubs value="5" />    </runtime></configuration>
Опис: NGenReserveForJumpStubs, викликає загальномовне середовище виконання зарезервувати відсоток адресного простору, для переходу статті біля кожного завантаженого зображення з NGen. Рекомендується використовувати значення 5 або більше, якщо цей виняток у OutOfMemory виникають.
Додаткові відомості

Для розробників

  • .NET Framework, кодує спосіб дзвінки як відносно переходить в 32-розрядних для покращення продуктивності. 64-розрядний системи викликає викликається можуть бути далі окремо перевищує 2 ГБ (адресний простір). Через те, що перевищено підписаний зсуву з 32-розрядні, діапазон адрес, .NET створює переходів-заглушка протягом абонент 2 Гб. Перехід заглушка може потім переконайтеся, що "довгих" перейти до будь-якому місці в 64-розрядного адресного простору.
  • JIT та NGen, пом'якшення працювати з трохи по-іншому. Обидва залишаємо за собою додаткові адресного простору в відразу, але точка, де здійснюється ця резервування, що відрізняється між ними.
  • NGenReserveForJumpStubs-це відсоток віртуальний NGen зображення (розмірpercentReserveForJumpStubs).
  • Типові переходів вікі-це 12 байт. Щоб отримати додаткові відомості див. JUMP_ALLOCATE_SIZE.
  • Пам'ять виділяється і захищені до адреси, де було завантажено NGen зображення (точний алгоритм — EEJitManager::EnsureJumpStubReserve). Якщо необхідно, щоб виділити переходів вікі і немає іншого місця відповідного адреси пам'яті охороняє.
  • Зазначено раніше потоків, не змінювати вміст NGen зображення. NGen зображення, мають ж слід диска як з і без потоків.
  • Наразі немає спосіб виявлення під Вільний час застосування Збільшення до максимальної. Потрібно, стежити за OutOfMemoryException, щоб визначити, чи достатньо зарезервоване місце.
  • Навіть якщо є багато пам'яті, які не використовуються через те, що стосується цю помилку на наявність пам'яті, в межах 2 Гб адресу діапазон абонента, може з'явитися на OutOfMemoryException.
  • Не можна змінювати значення за промовчанням CodeHeapReserveForJumpStubs, тому що вона не можуть бути пов'язані проблеми, описані вище. Ми не бачили випадок, коли фактичного застосування доведеться змінити цей параметр, щоб тимчасово усунути неполадки.
  • Налаштування NGenReserveForJumpStubs значно вище значення може призвести до зниження продуктивності і ризик виявлення інших питань, тонкий.

Для ІТ-користувачів

  • Ця проблема може виникати з інших версій .NET Framework. Однак це виправлення, в даний Вільний час застосовується лише до .NET Framework 4.6.1.
  • Це питання дуже рідко, що впливає тільки на великого навантаження, які дуже зокрема виконання шаблон. Більше 99 відсотків усіх навантаження ця проблема виникає.
  • Після того, як застосунок, кидає виключення OutOfMemory, єдиний спосіб рекомендований для відновлення є перезапуску.

Попередження. Цю статтю переведено автоматично

Властивості

Ідентифікатор статті: 3152158 – останній перегляд: 05/10/2016 19:36:00 – виправлення: 2.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbtshoot kbexpertiseinter kbmt KB3152158 KbMtuk
Зворотний зв’язок