Đối với mỗi giải pháp dưới đây tôi chạy một 131072 (128 * 1024) lặp đi lặp lại (trong một thread tách ra). Các trợ lý hiệu suất VS2010 cho kết quả này:
- read-only MethodInvoker: 5664,53 (+ 0%)
- New MethodInvoker: 5828,31 (+ 2,89%)
- chức năng dàn diễn viên trong MethodInvoker: 5857,07 (3,40 %)
- read-only hành động: 6467,33 (+ 14,17%)
- hành động mới: 6.829,07 (+ 20,56%)
Gọi đến một mới Action tại mỗi lần lặp
private void SetVisibleByNewAction()
{
if (InvokeRequired)
{
Invoke(new Action(SetVisibleByNewAction));
}
else
{
Visible = true;
}
}
Gọi đến một read-only, xây dựng trong constructor, Action tại mỗi lần lặp
// private readonly Action _actionSetVisibleByAction
// _actionSetVisibleByAction= SetVisibleByAction;
private void SetVisibleByAction()
{
if (InvokeRequired)
{
Invoke(_actionSetVisibleByAction);
}
else
{
Visible = true;
}
}
Gọi đến một mới MethodInvoker tại mỗi lần lặp.
private void SetVisibleByNewMethodInvoker()
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(SetVisibleByNewMethodInvoker));
}
else
{
Visible = true;
}
}
Gọi đến một read-only, xây dựng trong constructor, MethodInvoker tại mỗi lần lặp
// private readonly MethodInvoker _methodInvokerSetVisibleByMethodInvoker
// _methodInvokerSetVisibleByMethodInvoker = SetVisibleByMethodInvoker;
private void SetVisibleByMethodInvoker()
{
if (InvokeRequired)
{
Invoke(_methodInvokerSetVisibleByMethodInvoker);
}
else
{
Visible = true;
}
}
Gọi đến chức năng dàn diễn viên trong MethodInvoker tại mỗi lần lặp
private void SetVisibleByDelegate()
{
if (InvokeRequired)
{
Invoke((MethodInvoker) SetVisibleByDelegate);
}
else
{
Visible = true;
}
}
Ví dụ về cuộc gọi cho giải pháp "Hành động mới":
private void ButtonNewActionOnClick(object sender, EventArgs e)
{
new Thread(TestNewAction).Start();
}
private void TestNewAction()
{
var watch = Stopwatch.StartNew();
for (var i = 0; i < COUNT; i++)
{
SetVisibleByNewAction();
}
watch.Stop();
Append("New Action: " + watch.ElapsedMilliseconds + "ms");
}
Nhìn này cũng http://mark-dot-net.blogspot.com.uy/2014/07/six-ways-to-initiate-tasks-on-another.html –