- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个使用 AvalonDock 框架的应用程序。一个关键部分是使用 AvalonDock.DocumentContent
派生编辑器编辑域模型实体的能力。我遇到了一个问题,发现我的编辑器在关闭并从 DockingManager.Documents
集合中删除后没有被垃圾回收。
经过一番无果而终的搜索后,我创建了一个可以按以下方式重新创建的小型测试应用程序:
AvalonDockLeak
的新 WPF 应用程序;Document
的新用户控件;将 Document.xmal 更改为:
<ad:DocumentContent x:Class="AvalonDockLeak.Document"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock">
<Grid>
<TextBox />
</Grid>
</ad:DocumentContent>
将 Document.xmal.cs 更改为:
namespace AvalonDockLeak
{
using AvalonDock;
public partial class Document : DocumentContent
{
public Document()
{
InitializeComponent();
}
~Document()
{
}
}
}
我添加的析构函数能够诊断问题,在打开 { 的方法上添加一个断点,并查看它是否被命中。它总是在关闭测试应用程序时执行,但不会更早。
现在将 Window1.xaml 更改为:
<Window x:Class="AvalonDockLeak.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock"
Title="Memory Leak Test" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Button Name="NewButton" Click="NewButton_Click" Content="New" Height="26" Width="72" />
<ad:DockingManager x:Name="DockManager" Grid.Row="1">
<ad:DocumentPane />
</ad:DockingManager>
</Grid>
</Window>
将 Window1.xaml.cs 更改为:
namespace AvalonDockLeak
{
using System.Windows;
public partial class Window1 : Window
{
private int counter = 0;
public Window1()
{
InitializeComponent();
}
private void NewButton_Click(object sender, RoutedEventArgs e)
{
string name = "Document" + (++this.counter).ToString();
var document = new Document()
{
Name = name,
Title = name,
IsFloatingAllowed = false
};
document.Show(this.DockManager);
document.Activate();
}
}
}
这个简单的应用程序也包含漏洞。这可以通过 ~Document()
上的断点观察到,打开 { not getting hit after closing a DocumentContent
.
现在我想问的是,这是一个已知问题吗?有什么办法可以预防吗?如果对象只是在很长一段时间后才被垃圾收集,那么我该怎么做才能加快速度呢?顺便说一下,调用 GC.Collect() 没有帮助。
最佳答案
显然,您的 DocumentContent 的引用由某处的事件处理程序保存。你应该使用像 CLR-Profiler 这样的内存分析器从微软来确定原因。
您应该注意始终注销已注册的事件。否则你可能会发生内存泄漏。为此,您可以使用 -= 运算符。
关于c# - AvalonDock DocumentContent 未被垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705343/
我的申请没有多个文件。所以我不需要 LayoutDocumentPane 中显示的选项卡。我发现它可以通过在此处使用样式进行自定义。 http://avalondock.codeplex.com/wi
我像这样使用 avalondock LayoutDocumentPane:
我正在开发一个可以使用 AvalonDock 的 WPF 界面,或类似的可停靠窗口界面。我的理解是 AvalonDock 是一个非常好的可停靠窗口界面,但我有点担心它的持续状态。真的很活跃吗?网站讨论
似乎 AvalonDock 在任何时候通过停靠或取消停靠操作窗口时都会卸载并重新加载其文档窗口的内容。有没有可能把它关掉? 就我而言,我正在显示实时视频流,我需要在窗口设置为 float 或重新停靠时
有谁知道如何在 AvalonDock 2.0 中更改 LayoutAnchorable 和 LayoutDocument 标题的字体属性?我希望能够应用在我的 WPF 应用程序中随处使用的样式以保持一
我正在使用知名的对接库AvalonDock 2.0在我的 WPF 项目中。该库支持 MVVM,这就是我想要做的。 GitHub 上提供了示例 MVVM 测试应用程序.我下载了示例并将其扩展以显示我需要
我使用的加载/保存布局类似于CodeProject所述。捕获LayoutSerializationCallback事件并尝试为LayoutItem查找相应的viewModel private void
使用 avalondock在 MVVM 环境中似乎相当具有挑战性。一旦我从 shellview 中分离 DocumentPane,我就会丢失相应的数据上下文并且我的 View 是空的。重新连接时,它会
我有一个使用 Avalon Dock 2.0 作为停靠管理器的 WPF 应用程序。我遇到了有关 Avalon Dock 正在执行的新打开选项卡的标准定位问题。 只要所有选项卡都适合选项卡栏,就会在选项
我有一个使用 Avalon Dock 2.0 作为停靠管理器的 WPF 应用程序。我遇到了有关 Avalon Dock 正在执行的新打开选项卡的标准定位问题。 只要所有选项卡都适合选项卡栏,就会在选项
如果 Pane 获得焦点,我想更改 Pane 标题的背景。 所以试了一下:
我刚刚开始使用 AvalonDock,几天来我一直在苦苦挣扎。我正在尝试从反序列化的停靠管理器加载我的布局的平凡任务。我尝试了这篇文章所建议的(“AvalonDock DockingManager d
我在项目中使用 AvalonDock。为了这个例子,它的结构如下: 这很好,但不幸的是,这些选项卡在高对
我正在尝试将我的 WPF 应用程序转换为使用 AvalonDock。我有几个窗口(大约 10 个)和具有 DockingManager 的主窗体。我想将这些窗口放在 DockingManager 中。
我想更改 AvalonDock 的 Metro 主题颜色。我也问了a related question on Codeplex但到目前为止我还没有得到答案。 我将以下 XAML ( source fi
我正在尝试在 AvalonDock 中选择选项卡(在 LayoutDocumentPaneGroup 和 LayoutAnchorablePane 中)。这看起来应该是一件容易的事,但我正在努力寻找有
我试图弄清楚如何使 AvalonDock 的 VS2010 风格更像 VS2010。我运行的问题是,当有更多的标签时比在标题区域中适合时,用户没有更多的标签。 我认为选项卡标题只是被剪裁而不可见。我有
我有一个带有 AvalonDock 的窗口。启动时会打开一个文档,其中充满 LocControllers 用户控件 (LocControllersViewModel)。 现在我希望当双击 LocCon
我想删除它们,因为这给我带来了很多问题。如果有办法解决它,我会很乐意尝试。 使用它的前几分钟我得到了 3 个不同的异常(exception),我不知道如何删除那些该死的选项。 固定和取消固定和固定会引
我的 MVVM WPF 应用程序中有一个 AvalonDock(版本 3.5)。绑定(bind)如下: 因此,当我在 View 模型中将新的 Anchorable 添加到相应的“Anchor
我是一名优秀的程序员,十分优秀!