Причина медленной производительности в WPFC#

Место общения программистов C#
Ответить
Anonymous
 Причина медленной производительности в WPF

Сообщение Anonymous »

Я создаю большое количество текстов в WPF, используя DrawText , а затем добавляю их в один Canvas . < /p>

Мне нужно перерисовать экран в каждом событии мышиного колеса < /code>, и я понял, что производительность немного медленная, поэтому я измерил время, когда объекты создаются, и это было менее 1 миллисекунд! < /p>

Итак, в чем может быть проблема? Давным -давно, я думаю, я где -то читал, что на самом деле это рендеринг < /code>, который занимает время, не создавая и не добавляя визуальные эффекты.public class ColumnIdsInPlan : UIElement
{
private readonly VisualCollection _visuals;
public ColumnIdsInPlan(BaseWorkspace space)
{
_visuals = new VisualCollection(this);

foreach (var column in Building.ModelColumnsInTheElevation)
{
var drawingVisual = new DrawingVisual();
using (var dc = drawingVisual.RenderOpen())
{
var text = "C" + Convert.ToString(column.GroupId);
var ft = new FormattedText(text, cultureinfo, flowdirection,
typeface, columntextsize, columntextcolor,
null, TextFormattingMode.Display)
{
TextAlignment = TextAlignment.Left
};

// Apply Transforms
var st = new ScaleTransform(1 / scale, 1 / scale, x, space.FlipYAxis(y));
dc.PushTransform(st);

// Draw Text
dc.DrawText(ft, space.FlipYAxis(x, y));
}
_visuals.Add(drawingVisual);
}
}

protected override Visual GetVisualChild(int index)
{
return _visuals[index];
}

protected override int VisualChildrenCount
{
get
{
return _visuals.Count;
}
}
}
< /code>

И этот код запускается каждый раз, когда событие мышиного колеса < /code> запускается: < /p>

var columnsGroupIds = new ColumnIdsInPlan(this);
MyCanvas.Children.Clear();
FixedLayer.Children.Add(columnsGroupIds);
< /code>

Что может быть виновником? private void Workspace_MouseMove(object sender, MouseEventArgs e)
{
MousePos.Current = e.GetPosition(Window);
if (!Window.IsMouseCaptured) return;
var tt = GetTranslateTransform(Window);
var v = Start - e.GetPosition(this);
tt.X = Origin.X - v.X;
tt.Y = Origin.Y - v.Y;
}


Подробнее здесь: https://stackoverflow.com/questions/241 ... nce-in-wpf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»