Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将视图绑定到ViewModel时WPF中的工具提示内存泄漏_C#_Wpf_Mvvm_Memory Leaks_Tooltip - Fatal编程技术网

C# 将视图绑定到ViewModel时WPF中的工具提示内存泄漏

C# 将视图绑定到ViewModel时WPF中的工具提示内存泄漏,c#,wpf,mvvm,memory-leaks,tooltip,C#,Wpf,Mvvm,Memory Leaks,Tooltip,我在WPF,MVVM中有一个应用程序。在列表框中显示图像的列表,每个图像都与不同的会话相关联 我的ListBoxItemTemplate如下所示 <ListBox.ItemTemplate> <DataTemplate> <Image Source="{Binding IsClaims,Converter={StaticResource PolicyClaimsImageSelector}}" ToolT

我在
WPF
MVVM
中有一个应用程序。在
列表框中显示
图像的列表
,每个图像都与不同的会话相关联

我的
ListBox
ItemTemplate
如下所示

<ListBox.ItemTemplate>
   <DataTemplate>
      <Image 
          Source="{Binding IsClaims,Converter={StaticResource PolicyClaimsImageSelector}}" 
          ToolTipService.ShowDuration="7000">
             <Image.ToolTip>                                           
                <StackPanel>
                  <TextBlock Text="{Binding WorkingSessionName}" />
                  <Views:ToolTipView DataContext="{Binding ThisViewModel}"/>
                </StackPanel>
            </Image.ToolTip>
      </Image>
   </DataTemplate>
</ListBox.ItemTemplate>
当工具提示出现内存泄漏时,不理解其发生的原因, 我的问题是,在显示
工具提示后,是否需要对
工具提示
进行任何处理
以处置
内存?。如果是这样,怎么做?

编辑

没有订阅任何活动。仅绑定不同视图的不同视图模型的数据上下文

ToolTipView.XAML

 <DockPanel>
    <xcad:DockingManager  DockPanel.Dock="Left" Grid.Row="2" BorderBrush="Black" BorderThickness="1">
        <xcad:DockingManager.Theme>
            <xcad:MetroTheme />
        </xcad:DockingManager.Theme>
        <xcad:LayoutRoot >
            <xcad:LayoutPanel Orientation="Horizontal" >
                <xcad:LayoutAnchorablePaneGroup Orientation="Horizontal" DockMinWidth="150" >
                    <xcad:LayoutAnchorablePane >
                        <xcad:LayoutAnchorable Title="Folder" x:Name="ExplorerView" AutoHideWidth="300">
                            <Views:ExplorerView DataContext="{Binding ExplorerViewModel}"/>
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorablePane>
                </xcad:LayoutAnchorablePaneGroup>
                <xcad:LayoutAnchorablePaneGroup Orientation="Horizontal" DockMinWidth="450" >
                    <xcad:LayoutAnchorablePane >
                        <xcad:LayoutAnchorable Title="Documents"  x:Name="TOC">
                            <Views:TableOfContentView  DataContext="{Binding TableOfContentViewModel}"/>
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorablePane>
                </xcad:LayoutAnchorablePaneGroup>
                <xcad:LayoutAnchorablePaneGroup Orientation="Vertical" DockMinWidth="320">
                    <xcad:LayoutAnchorablePane DockMinHeight="400" >
                        <xcad:LayoutAnchorable Title="Properties"  x:Name="Property">
                            <Views:PropertyView DataContext="{Binding PropertyViewModel}"/>
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorablePane>
                    <xcad:LayoutAnchorablePane >
                        <xcad:LayoutAnchorable Title="Search"  x:Name="Search">
                            <Views:SearchPanel DataContext="{Binding SearchViewModel}"/>
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorablePane>
                </xcad:LayoutAnchorablePaneGroup>                    
            </xcad:LayoutPanel>
        </xcad:LayoutRoot>
    </xcad:DockingManager>
</DockPanel>

这有点像是暗中捅了一刀,但也许可以尝试一下。我遇到过一个问题,某些图形驱动程序可能会以某种方式触发WPF中的漏洞。我们最终导致WPF禁用硬件加速并重新测试。这不是一个理想的答案,但足以让我们为长期运行客户端的客户解决这个问题

在注册表中(系统范围内)

或通过应用程序本身的代码:

   RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
您可以使用“WPF性能套件”测试通过软件或硬件渲染的内容,并为软件渲染元素启用紫色色调


我希望这会有所帮助。

我已经通过创建一个模拟实际绑定的接口修复了它。见下文

 public IExplorer ToolTipExplorerViewModel
    {
        get { return ExplorerViewModel; }            
    }

    public ITableOfContents ToolTipTableOFContents
    {
        get { return TableOfContentViewModel; }
    }
现在,我使用ToolTipView ie绑定此属性:

<Views:ExplorerView DataContext="{Binding ToolTipExplorerViewModel}" Grid.Column="0"/>
<Views:TableOfContentView  DataContext="{Binding ToolTipTableOFContents}" Grid.Column="1" />      


现在,当我们更改工具提示时,内存不会增加。

如何确定存在泄漏?你对此持肯定态度吗?我正在VS2015中调试该应用程序,它有一个内置工具
诊断工具
,当我
鼠标悬停
每张图像时,它会显示内存提升,正如
工具提示
当时所显示的那样。@AbinMathew将鼠标悬停事件提升1000000次,如果内存消耗增加,请查看。你可能没有内存泄漏你在ToolTipView中做什么?若您正在订阅ThisViewModel的任何事件,那个么您将泄漏yes。请把密码寄出去ToolTipView@atomaras在问题中添加了查看代码。ViewModels中没有订阅的事件,只有属性和命令。
   RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
 public IExplorer ToolTipExplorerViewModel
    {
        get { return ExplorerViewModel; }            
    }

    public ITableOfContents ToolTipTableOFContents
    {
        get { return TableOfContentViewModel; }
    }
<Views:ExplorerView DataContext="{Binding ToolTipExplorerViewModel}" Grid.Column="0"/>
<Views:TableOfContentView  DataContext="{Binding ToolTipTableOFContents}" Grid.Column="1" />