为什么用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个图片的场合。