Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Khắc phục: Rò rỉ bộ nhớ mặt trong một ứng dụng WPF khi một đối tượng brush là tham chiếu bằng cách sử dụng một DynamicResource

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

2651992
TRIỆU CHỨNG
Hãy xem xét kịch bản sau đây:
  • Bạn tạo ra một ứng dụng Microsoft Windows Presentation Foundation (WPF) các mục tiêu của Microsoft.NET Framework 3.0 hoặc Microsoft.NET Framework 3.5.
  • Ứng dụng xác định một đối tượng bàn chải và một đối tượng màu trong tập tin XAML của ứng dụng.
    • Sử dụng các đối tượng bàn chải một DynamicResource để tham khảo các đối tượng màu sắc. Ví dụ,
      <Application.Resources><Color x:Key="color1">#ff4050ff</Color><SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/></Application.Resources>
    • Đối tượng brush được tham chiếu như một DynamicResource trong một cửa sổ WPF hoặc một điều khiển người dùng hay một đối tượng. Ví dụ,
      <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>
  • Bạn mở hoặc đóng các trường hợp của cửa sổ hoặc điều khiển người dùng.

Trong trường hợp này, trường hợp bắt nguồn từ rác thải thu thập (GC) heap và không được phát hành. Theo thời gian, một rò rỉ bộ nhớ xảy ra khi càng có nhiều trường hợp của cửa sổ hoặc điều khiển người dùng được tạo ra. Cuối cùng, bạn nhận được một System.OutOfMemoryException ngoại lệ.

Lưu ý Vấn đề này không xảy ra khi việc áp dụng các mục tiêu của Microsoft.NET Framework 4.

NGUYÊN NHÂN
Vấn đề này xảy ra bởi vì WPF thời gian chạy dây một xử lý sự kiện nội bộ cho các ResourceReferenceExpressionđối tượng kết hợp với các nguồn tài nguyên cửa sổ hoặc điều khiển người dùng đang sử dụng. Tham chiếu xử lý sự kiện này không được cắt bỏ khi cửa sổ hoặc điều khiển người dùng là đóng cửa và thiết lập để null.
GIẢI PHÁP

Thông tin hotfix

Một hotfix được hỗ trợ là bây giờ có sẵn từ Microsoft. Tuy nhiên, nó là nhằm sửa chỉ vấn đề bài viết này mô tả. Nó chỉ áp dụng cho hệ thống đang gặp vấn đề này cụ thể.

Để giải quyết vấn đề này, liên hệ với dịch vụ hỗ trợ khách hàng Microsoft để có được các hotfix. Cho một danh sách đầy đủ các dịch vụ hỗ trợ Microsoft khách hàng số điện thoại và thông tin về chi phí hỗ trợ, hãy truy cập trang web của Microsoft sau đây:Lưu ý Trong trường hợp đặc biệt, chi phí mà thường phải gánh chịu cho các cuộc gọi hỗ trợ có thể được hủy bỏ nếu chuyên viên hỗ trợ Microsoft xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Các chi phí hỗ trợ thông thường sẽ áp dụng để hỗ trợ thêm câu hỏi và vấn đề mà không đủ điều kiện cho các Cập Nhật cụ thể trong câu hỏi.

Điều kiện tiên quyết

Để áp dụng hotfix này, bạn phải có Microsoft.NET Framework 3.5.1 cài trên máy tính đang chạy một hệ điều hành sau:
  • Windows 7 Service Pack 1 (SP1)
  • Windows Server 2008 R2 Service Pack 1 (SP1)


Khởi động lại yêu cầu

Bạn phải khởi động lại máy tính sau khi bạn áp dụng hotfix này nếu các tập tin bị ảnh hưởng đang được sử dụng.

Thông tin về tệp

Các phiên bản toàn cầu của hotfix này có các thuộc tính tệp (hoặc sau này tập tin thuộc tính) mà được liệt kê trong bảng sau. Ngày tháng và thời gian cho các tập tin được liệt kê trong giờ phối hợp quốc tế (UTC). Khi bạn xem chi tieát taäp tin, nó được chuyển đổi thành giờ cục bộ. Để biết sự khác nhau giữa UTC và local time, sử dụng các Múi giờ thẻ tab trong các Ngaøy giôø mục trong bảng điều khiển.

Fhoặc tất cả các hỗ trợ x 86 dựa trên phiên bản của Windows 7
Tên tệpPhiên bản tệpKích thước tập tinNgày thángThời gianNền tảng
Presentationframework.dll3.0.6920.57385,283,84016-Dec-201101: 49x 86
Windowsbase.dll3.0.6920.57381,253,37616-Dec-201101: 49x 86
Presentationcore.dll3.0.6920.57384,218,88016-Dec-201101: 49x 86
Presentationframework.dll3.0.6920.57385,283,84016-Dec-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dec-201101: 49x 86
Presentationhost.exe4.0.40305.0296,22416-Dec-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dec-201101: 49x 86
Windowsbase.dll3.0.6920.57381,253,37616-Dec-201101: 49x 86

Fhoặc tất cả các hỗ trợ x 64 dựa trên các phiên bản của Windows 7 và Windows Server 2008 r2
Tên tệpPhiên bản tệpKích thước tập tinNgày thángThời gianNền tảng
Presentationcore.dll3.0.6920.57383,998,72016-Dec-201101: 42x 64
Presentationframework.dll3.0.6920.57384,640,76816-Dec-201101: 42x 86
Presentationhostdll.dll3.0.6920.5738172,32016-Dec-201101: 42x 64
Presentationhost.exe4.0.31106.0321,31216-Dec-201101: 42x 64
Presentationhostproxy.dll4.0.31106.0110,88816-Dec-201101: 42x 64
Windowsbase.dll3.0.6920.57381,114,11216-Dec-201101: 42x 86
Presentationframework.dll3.0.6920.57385,283,84016-Dec-201101: 49x 86
Windowsbase.dll3.0.6920.57381,253,37616-Dec-201101: 49x 86
Presentationcore.dll3.0.6920.57384,218,88016-Dec-201101: 49x 86
Presentationframework.dll3.0.6920.57385,283,84016-Dec-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dec-201101: 49x 86
Presentationhost.exe4.0.40305.0296,22416-Dec-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dec-201101: 49x 86
Windowsbase.dll3.0.6920.57381,253,37616-Dec-201101: 49x 86



CÁCH GIẢI QUYẾT KHÁC
Để làm việc xung quanh vấn đề này, sử dụng một trong những phương pháp sau đây:
  • Sử dụng mộtStaticResource để tham khảo các đối tượng màu trong đối tượng bàn chải. Ví dụ, thay đổi một phần đầu tiên của mã trong tập tin XAML được đề cập trong phần "Triệu chứng" như sau:
    <Color x:Key="color1">#ff4050ff</Color> <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Đặt cácx: chia sẻ tùy chọn để sai nếu các DynamicResource được sử dụng. Ví dụ, thay đổi một phần đầu tiên của mã trong tập tin XAML được đề cập trong phần "Triệu chứng" như sau:
    <Application.Resources>        <Color x:Key="color1">#ff4050ff</Color>        <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />    </Application.Resources>



THAM KHẢO
Để biết thêm thông tin về các DynamicResource đánh dấu phần mở rộng, truy cập vào trang web MSDN sau đây:
Để biết thêm chi tiết về WPF bàn chải, truy cập trang web MSDN sau đây:
TÌNH TRẠNG
Microsoft đã xác nhận rằng đây là một vấn đề trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 2651992 - Xem lại Lần cuối: 01/10/2012 01:55:00 - Bản sửa đổi: 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 KbMtvi
Phản hồi