AvalonEdit和抽象边距一起滚动内存泄漏

时间:2018-01-29 18:21:48

标签: wpf memory-leaks uiscrollview avalonedit

我的项目有下一个问题。 我必须将AbstractMargin添加到AvalonEdit控件中以创建一些书签/断点。

当我将AvalonEdit控件放入ScrollViewer时,AbstractMargin滚动并且正常工作。 的 BUT! 当我现在打开一些文档,特别是BIG时,ScrollViewer导致内存泄漏。内存的使用呈指数级增长,最终导致我的应用程序崩溃。

ScrollViewer - 使用450MB RAM,没有ScrollViewer 160MB RAM只打开1个小文件!)

当我删除ScrollViewer并仅使用从AvalonEdit控件滚动时,我的AbstractMargin不会滚动。

你可以帮帮我 - 我怎么能用额外的余量滚动avalon ......

   ...
 <DataTemplate >
     <ScrollViewer 
         Background="Transparent" 
         VerticalScrollBarVisibility="Visible" 
         HorizontalScrollBarVisibility="Auto" 
         PreviewMouseWheel="ScrollViewer_PreviewMouseWheel"
     >
     <avalonEdit:TextEditor 
         x:Name="TextEditor"
         Document="{Binding DokumentTekstowy, UpdateSourceTrigger=PropertyChanged}" 
         IsModified="{Binding Edytowany, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
         IsReadOnly="{Binding TylkoDoOdczytu}"
...

在Code Behind中我正在添加保证金

t.TextArea.LeftMargins.Insert(0, z);

其中z是

public class ZakladkaMargines : AbstractMargin
{ 
    protected override HitTestResult HitTestCore(PointHitTestParameters hit)
    {
        return new PointHitTestResult(this, hit.HitPoint);
    }

    /// <inheritdoc/>
    protected override Size MeasureOverride(Size availableSize)
    {
        return new Size(20, 00);
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        ...
    }

    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
       ...
    }

结果是我可以用我的边距滚动avalon,但是当打开大文档时会产生很多Rect和其他visualtext对象,内存泄漏,应用程序崩溃。

如果我删除ScrollViewer并使用

<avalonEdit:TextEditor 
       ...

    VerticalScrollBarVisibility="Visible" 
    HorizontalScrollBarVisibility="Auto" 
>

没有内存泄漏,性能良好,但我增加的余量不会滚动。

0 个答案:

没有答案