2017-10-10 50 views
0

更新:我重新启动了机器,速度并不像500毫秒慢,但它仍然需要大约40毫秒才能显示上下文菜单,我将它与原生Winforms菜单(它更快)进行了比较。另外,我已经通过设置时间戳来验证MyGridMenu.Show是这里的瓶颈,一旦它被注释掉,整个功能几乎没有时间。DevExpress.XtraGrid.Menu显示速度非常缓慢(与原生Winforms菜单弹出窗口相比)

我在写一个基于Devexpress的xGrid应用程序,我需要自定义上下文菜单。我用下面的代码片段和.Show函数调用很长(500ms)。这种缓慢程度对于本地应用程序来说是不能容忍的,但我对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

你需要解释什么是'ExternalManagerContextualMenuView'和'this.MyDataStore'?我怀疑这里最慢的部分是自定义数据绑定,而不是组件本身。 –

+0

不是这样,我通过为每一行设置时间戳,证实它是'MyGridMenu.Show()',速度很慢。 – benjaminz

+0

您是否尝试过单独循环数据源?否则,它不验证任何内容,在调用Show之前,只给数据源分配一个引用,实际的数据检索在显示时发生。你仍然需要解释什么是'ExternalManagerContextualMenuView'。 –

回答

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()); 
相关问题