В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

ИСПРАВЛЕНИЕ: Утечка памяти в приложении WPF объект brush при обращении с помощью DynamicResource

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:2651992
Проблема
Рассмотрим следующий сценарий:
  • Создание приложения Microsoft Windows Presentation Foundation (WPF), предназначенный для Microsoft.NET Framework 3.0 или Microsoft.NET Framework 3.5.
  • Приложение определяет кисти и цвета объектов в XAML-файл приложения.
    • Использует объект brush DynamicResource для ссылки на объект color. Например,
      <Application.Resources><Color x:Key="color1">#ff4050ff</Color><SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/></Application.Resources>
    • Объект brush, упоминается как DynamicResource в окно WPF, пользовательский элемент управления или другой объект. Например,
      <Window x:Class="WpfApplication6.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Height="300" Width="300" Background="{DynamicResource brush1}"></Window>
  • Открыть или закрыть экземпляров окна или пользовательского элемента управления.

В этом случае экземпляры в куче мусора (GC) и не освобождается. Со временем возникает утечка памяти при создании больше экземпляров окна или пользовательского элемента управления. В конечном итоге получать System.OutOfMemoryException исключение.

Примечание Эта проблема возникает, если приложение предназначено для Microsoft.В разделе 4.

Причина
Эта проблема возникает из-за выполнения WPF проводов внутренний обработчик для ResourceReferenceExpressionобъект, связанный с ресурсом, используя окна или пользовательского элемента управления. Эту ссылку на обработчик событий не удаляется, когда null закрытых и задать для окна или пользовательского элемента управления.
Решение

Сведения об исправлении

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

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

Необходимые условия

Данное исправление необходимо наличие Microsoft.NET Framework 3.5.1, установленные на компьютере под управлением одной из следующих операционных систем:
  • Windows 7 с пакетом обновления 1 (SP1)
  • Windows Server 2008 R2 с пакетом обновления 1 (SP1)


Необходимость перезагрузки

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

Сведения о файле

Общая версия данного исправления содержит атрибуты файлов (или более поздними), приведенные в следующей таблице. Дата и время для файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, преобразуются в местное время. Чтобы узнать разницу между временем UTC и местным временем, следует использовать Часовой пояс Вкладка в Дата и время элемент панели управления.

Fили всех поддерживаемых 32 разрядных версий Windows 7
Имя файлаВерсия файлаРазмер файлаДатаВремяПлатформа
PresentationFramework.dll3.0.6920.57385,283,84016-Дек-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Дек-201101: 49x 86
PresentationCore.dll3.0.6920.57384,218,88016-Дек-201101: 49x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Дек-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Дек-201101: 49x 86
PresentationHost.exe4.0.40305.0296,22416-Дек-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Дек-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Дек-201101: 49x 86

Fили всех поддерживаемых x 64-разрядных версий Windows 7 и Windows Server 2008 R2
Имя файлаВерсия файлаРазмер файлаДатаВремяПлатформа
PresentationCore.dll3.0.6920.57383,998,72016-Дек-201101: 42x 64
PresentationFramework.dll3.0.6920.57384,640,76816-Дек-201101: 42x 86
Presentationhostdll.dll3.0.6920.5738172,32016-Дек-201101: 42x 64
PresentationHost.exe4.0.31106.0321,31216-Дек-201101: 42x 64
Presentationhostproxy.dll4.0.31106.0110,88816-Дек-201101: 42x 64
WindowsBase.dll3.0.6920.57381,114,11216-Дек-201101: 42x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Дек-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Дек-201101: 49x 86
PresentationCore.dll3.0.6920.57384,218,88016-Дек-201101: 49x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Дек-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Дек-201101: 49x 86
PresentationHost.exe4.0.40305.0296,22416-Дек-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Дек-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Дек-201101: 49x 86



Временное решение
Чтобы обойти эту проблему, воспользуйтесь одним из следующих методов:
  • ИспользованиеStaticResource для ссылки на объект color в объект brush. Например можно измените первую часть кода в файле XAML, описанное в разделе «Проблема», следующий:
    <Color x:Key="color1">#ff4050ff</Color> <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Установкаx: Общие значение false, если параметр DynamicResource используется. Например можно измените первую часть кода в файле XAML, описанное в разделе «Проблема», следующий:
    <Application.Resources>        <Color x:Key="color1">#ff4050ff</Color>        <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />    </Application.Resources>



Ссылки
Дополнительные сведения о DynamicResource расширение разметки, посетите следующий веб-узел MSDN:
Дополнительные сведения о кистях WPF посетите следующий веб-узел MSDN:
Статус
Корпорация Майкрософт подтверждает, что это является проблемой в продуктах корпорации Майкрософт, перечисленных в разделе «Относится к».

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 2651992 — последний просмотр: 01/10/2012 01:53:00 — редакция: 1.0

Microsoft .NET Framework 3.0, Microsoft .NET Framework 3.0 Service Pack 1, Microsoft .NET Framework 3.0 Service Pack 2, Microsoft .NET Framework 3.5, Microsoft .NET Framework 3.5 Service Pack 1

  • kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 KbMtru
Отзывы и предложения