我是一個Windows窗體開發人員,我目前正忙着使用WPF。爲了快速比較文本框中的兩種文本渲染技術,我編寫了一個小程序,在窗口中創建大量文本框,並每100ms更新一次文本。緩慢的文本呈現與許多文本框
令我驚訝的是,測試應用程序的WPF版本呈現比WinForms版本慢得多。大多數情況下,應用程序完全不響應,例如,當我嘗試調整窗口大小時。該應用程序的WinForms版本運行平穩。
所以我的問題是:是否有問題的方式我使用WPF控件(我使用WrapPanel作爲控件容器在WPF和FlowLayoutPanel在WinForms中)?或者是文本渲染比WinForms真的慢?
WPF:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace PerformanceTestWPF
{
public partial class MainWindow : Window
{
DispatcherTimer _timer = new DispatcherTimer();
Random _r = new Random();
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 400; i++)
this.wrapPanel.Children.Add(new TextBox {Height = 23, Width = 120, Text = "TextBox"});
_timer.Interval = new TimeSpan(0,0,0,0, 100);
_timer.Tick += _timer_Tick;
_timer.Start();
}
private void _timer_Tick(object sender, EventArgs e)
{
foreach (var child in wrapPanel.Children)
{
var textBox = child as TextBox;
if (textBox != null)
{
textBox.Text = _r.Next(0, 1000).ToString();
}
}
}
}
}
的WinForms:
using System;
using System.Windows.Forms;
namespace PerformanceTestWinforms
{
public partial class Form1 : Form
{
Timer _timer = new Timer();
Random _r = new Random();
public Form1()
{
InitializeComponent();
for (int i = 0; i < 400; i++)
this.flowLayoutPanel1.Controls.Add(new TextBox { Height = 23, Width = 120, Text = "TextBox" });
_timer.Interval = 100;
_timer.Tick += _timer_Tick;
_timer.Start();
}
private void _timer_Tick(object sender, EventArgs e)
{
foreach (var child in flowLayoutPanel1.Controls)
{
var textBox = child as TextBox;
if (textBox != null)
{
textBox.Text = _r.Next(0, 1000).ToString();
}
}
}
}
}
這裏不會跳到結論。也許這是調度週期很昂貴。無法在我的機器上進行性能分析(需要更高的憑據);看看你能否做到這一點,找出哪些功能實際上是瓶頸。 –