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

Переводы статьи Переводы статьи
Код статьи: 2651992 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Рассмотрим следующий сценарий:
  • Создание приложения 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:
Общие сведения о расширение разметки DynamicResource
Дополнительные сведения о кистях WPF посетите следующий веб-узел MSDN:
Общие сведения о кистях WPF

Статус

Корпорация Майкрософт подтверждает, что это является проблемой в продуктах корпорации Майкрософт, перечисленных в разделе «Относится к».

Свойства

Код статьи: 2651992 - Последний отзыв: 10 января 2012 г. - Revision: 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
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:2651992

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com