Я столкнулся с ситуацией, где я пропускаю неуправляемую память, когда мышь отодвинута мое приложение WPF. А именно, когда я представляю приложение в perfmon
или профилировщик памяти Красного Логического элемента, частные байты монотонно увеличиваются, но байты во всех управляемых "кучах" остаются постоянными - которому, я верю, средства, что приложение имеет неуправляемую утечку.
Я создал тривиальное размноженное приложение, но я не вижу, где проблема.
Приложение состоит из ListView с четырьмя объектами. Перемещение мыши быстро по этим объектам вызывает проблему.
Вот код, если Вы интересуетесь репродуцированием проблемы - это не симпатично, но это просто.
Спасибо
править: Я создал проблему Microsoft Connect для этой проблемы.
App.xaml
App.xaml.cs
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace WpfLeakRepro
{
///
/// Interaction logic for App.xaml
///
public partial class App : Application
{
}
}
Generic.xaml
Window1.xaml
Window1.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.IO;
namespace WpfLeakRepro
{
public class Picture
{
public string Name { get; set; }
}
///
/// Interaction logic for Window1.xaml
///
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List
Проблема, похоже, связана с VisualBrush
, которая использовалась для клетчатого фона. Замените это кистью SolidColorBrush
, и проблема исчезнет. Но на самом деле это не имеет значения: сотрудники Microsoft посоветовали мне установить последние обновления до .NetFx 3.5sp1, и это, похоже, решает проблему (подробнее здесь ).
8080 зависел от внешнего оборудования для управления обработкой прерываний, поэтому его невозможно обобщить. Найдите информацию о контроллерах прерываний Intel 8214 или 8259.
-121--3579252-Если вы не против временно вставить свой documentFragment в DOM...
function getElementFromFragById(frag, id) {
var tempDiv = document.createElement("div");
tempDiv.style.display = "none";
tempDiv.appendChild(frag);
document.body.appendChild(tempDiv);
var elem = document.getElementById(id);
document.body.removeChild(tempDiv);
return document.getElementById(id) ? null : elem; //if the element still exists, we have a problem
}
Это работает надежно, если documentFragment
не содержит элементов с идентификатором, которые уже существуют в документе
, и требуется выполнить поиск по этому идентификатору.
Возможно, произошла известная утечка памяти в привязках WPF, которая может возникнуть при привязке к свойствам классов, не реализующих INotifyPropertyChanged
. В вашем случае свойство Name
класса Рисунков
.
Решения устанавливают режим привязки OneTime, позволяя Picture
реализовать INotifyPropertyChanged
или превращая Name
в свойство зависимости.
Дополнительные сведения см. в мс поддержки и этой записи блога . Эти и другие известные утечки памяти WPF можно найти здесь .