首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

为什么用managed directX绘2D图的速度比GDI+还慢?解决方案

2012-04-16 
为什么用managed directX绘2D图的速度比GDI+还慢?这是一段移动图片的代码图片是64*64的。private void pane

为什么用managed directX绘2D图的速度比GDI+还慢?
这是一段移动图片的代码 
图片是64*64的。 
  private void panel1_Paint(object sender, PaintEventArgs e) 
  { 
  string file = @"D:\d.JPG"; 
  int a = 0; 
  if (a == 0) 
  { 
  for (int i = 0; i < 500; i++) 
  { 
  Draw.DrawImage(file, panel1,i,0);//自己用dx封装的一个简单的类 
  Application.DoEvents(); 
  } 
  } 
  else 
  { 
  for (int i = 0; i < 500; i++) 
  { 

  e.Graphics.DrawImage(Image.FromFile(file), i, 0); 
  Application.DoEvents(); 
  } 
  } 
前者是DX绘图。后者是GDI+。 
但是在移动速度上后者比前者快好几倍~~ 
是不是我的代码有什么地方不对? 

这是draw.drawImage的代码: 
  public static void DrawImage(String File, Control control,int x,int y) 
  { 
  pp.Windowed = true; 
  pp.SwapEffect = SwapEffect.Discard; 
  de = new Device(0, DeviceType.Hardware, control, CreateFlags.HardwareVertexProcessing, pp); 
  sp = new Sprite(de); 
  te = TextureLoader.FromFile(de, File); 
  de.BeginScene(); 
  de.Clear(ClearFlags.Target, Color.White, 1.0f, 0); 
  sp.Begin(SpriteFlags.AlphaBlend); 
  sp.Draw(te, Vector3.Empty, new Vector3(x, y, 0), Color.White.ToArgb()); 
  sp.End(); 
  de.EndScene(); 
  de.Present(); 
  te.Dispose(); 
  de.Dispose(); 
  sp.Dispose(); 
  }

[解决办法]
每次绘制你都会new 一个Device,当然会慢,你可以在一个初始化的地方new Device一次,以后就重用这个device
[解决办法]
怎么说呢……D3D在你的这种场合的确性能不高,因为CPU和GPU的同步需要消耗很多时间。D3D更适合一次绘制500个甚至500万个图片,而不是分500次每次绘制1个图片的场合。

热点排行