DevExpress.XtraGrid.Menu显示速度非常慢(与本机Winforms菜单弹出窗口相比)

时间:2017-10-10 19:16:40

标签: c# winforms devexpress

更新:我重新启动了我的机器并且它没有500毫秒那么慢,但是为了显示上下文菜单它仍然需要大约40毫秒,我将它与原生的Winforms菜单进行了比较(是比较快的)。另外,我已经通过设置时间戳来验证MyGridMenu.Show是这里的瓶颈,一旦注释掉,整个功能几乎没有时间。

我正在编写一个基于Devexpress xGrid的应用程序,我需要自定义上下文菜单。我使用了以下代码片段,.Show函数调用非常长(500毫秒)。对于本机应用程序来说,这种程度的缓慢是无法容忍的,但我对C#,Winforms等真的很陌生,而且我没有想法。有谁知道可能是罪魁祸首?

    private void gridControl1_MouseUp(object sender, MouseEventArgs e)
    {
        Console.WriteLine("Detected your mouse up event!");
        var start = DateTime.Now;
        GridView view = sender as GridView;
        if (e.Button == MouseButtons.Right)
        {
            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = view.CalcHitInfo(new Point(e.X, e.Y));

            if (!hi.InColumnPanel)
            {
                var MyGridMenu = new ExternalManagerContextualMenuView(view)
                {
                        MyDataStore = this.MyDataStore
                };
                MyGridMenu.Init(hi);
                MyGridMenu.Show(hi.HitPoint);
            }
            var end = DateTime.Now;
            Console.WriteLine($"Showing this thing takes {end - start} time");
        }
  }

1 个答案:

答案 0 :(得分:0)

GridView提供PopupMenuShowing事件,允许您添加自定义菜单项。在这种情况下,您不需要处理MouseUp事件。

至于延迟问题,可能是由以下代码引起的:

    var MyGridMenu = new ExternalManagerContextualMenuView(view)
{
        MyDataStore = this.MyDataStore
};
MyGridMenu.Init(hi);
MyGridMenu.Show(hi.HitPoint);

您可以使用秒表来衡量这些线路占用的时间。

Stopwatch sw = new Stopwatch();
sw.Start();
//your code
sw.Stop();
Debug.WriteLine(sw.ElapsedMilliseconds.ToString());
相关问题