Used Queue instead of list for the queue

This commit is contained in:
Flamefire committed 2013-05-13 19:02:58 +02:00
1 parent cdad90a93d
commit f1ca307bc2
2 files changed
+17 -19

No files matched your search

+8 -7
View File
@@ -39,6 +39,8 @@ namespace Vocaluxe.Lib.Draw
class CDirect3D : RenderForm, IDraw class CDirect3D : RenderForm, IDraw
{ {
#region private vars #region private vars
private const int _MaxID = 100000;
private readonly CKeys _Keys; private readonly CKeys _Keys;
private readonly CMouse _Mouse; private readonly CMouse _Mouse;
private bool _Run; private bool _Run;
@@ -52,8 +54,8 @@ namespace Vocaluxe.Lib.Draw
private Size _SizeBeforeMinimize; private Size _SizeBeforeMinimize;
private readonly Dictionary<int, Texture> _D3DTextures = new Dictionary<int, Texture>(); private readonly Dictionary<int, Texture> _D3DTextures = new Dictionary<int, Texture>();
private readonly List<STextureQueue> _Queue = new List<STextureQueue>(); private readonly Queue<STextureQueue> _TexturesToLoad = new Queue<STextureQueue>();
private readonly Queue<int> _IDs = new Queue<int>(); private readonly Queue<int> _IDs = new Queue<int>(_MaxID);
private readonly Object _MutexTexture = new Object(); private readonly Object _MutexTexture = new Object();
@@ -82,7 +84,7 @@ namespace Vocaluxe.Lib.Draw
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon));
//Fill Queue with 100000 IDs //Fill Queue with 100000 IDs
for (int i = 0; i < 100000; i++) for (int i = 0; i < _MaxID; i++)
_IDs.Enqueue(i); _IDs.Enqueue(i);
_Keys = new CKeys(); _Keys = new CKeys();
@@ -938,7 +940,7 @@ namespace Vocaluxe.Lib.Draw
texture.ID = _IDs.Dequeue(); texture.ID = _IDs.Dequeue();
_D3DTextures.Add(texture.ID, null); _D3DTextures.Add(texture.ID, null);
STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data); STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data);
_Queue.Add(queue); _TexturesToLoad.Enqueue(queue);
} }
return texture; return texture;
} }
@@ -1269,10 +1271,9 @@ namespace Vocaluxe.Lib.Draw
{ {
lock (_MutexTexture) lock (_MutexTexture)
{ {
while (_Queue.Count > 0) while (_TexturesToLoad.Count > 0)
{ {
STextureQueue q = _Queue[0]; STextureQueue q = _TexturesToLoad.Dequeue();
_Queue.RemoveAt(0);
Texture t; Texture t;
if (_D3DTextures.TryGetValue(q.ID, out t) && t != null) if (_D3DTextures.TryGetValue(q.ID, out t) && t != null)
continue; continue;
+9 -12
View File
@@ -86,6 +86,8 @@ namespace Vocaluxe.Lib.Draw
class COpenGL : Form, IDraw class COpenGL : Form, IDraw
{ {
#region private vars #region private vars
private const int _MaxID = 100000;
private readonly CKeys _Keys; private readonly CKeys _Keys;
private readonly CMouse _Mouse; private readonly CMouse _Mouse;
private bool _Run; private bool _Run;
@@ -95,9 +97,9 @@ namespace Vocaluxe.Lib.Draw
private SClientRect _Restore; private SClientRect _Restore;
private bool _Fullscreen; private bool _Fullscreen;
private readonly Dictionary<int, CTexture> _Textures; private readonly Dictionary<int, CTexture> _Textures = new Dictionary<int, CTexture>();
private readonly Queue<int> _IDs; private readonly Queue<int> _IDs = new Queue<int>(_MaxID);
private readonly List<STextureQueue> _Queue; private readonly Queue<STextureQueue> _TexturesToLoad = new Queue<STextureQueue>();
private readonly Object _MutexTexture = new Object(); private readonly Object _MutexTexture = new Object();
@@ -113,11 +115,7 @@ namespace Vocaluxe.Lib.Draw
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon));
_Textures = new Dictionary<int, CTexture>(); for (int i = 1; i < _MaxID; i++)
_Queue = new List<STextureQueue>();
_IDs = new Queue<int>(1000000);
for (int i = 1; i < 1000000; i++)
_IDs.Enqueue(i); _IDs.Enqueue(i);
//Check AA Mode //Check AA Mode
@@ -816,7 +814,7 @@ namespace Vocaluxe.Lib.Draw
{ {
texture.ID = _IDs.Dequeue(); texture.ID = _IDs.Dequeue();
STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data); STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data);
_Queue.Add(queue); _TexturesToLoad.Enqueue(queue);
_Textures[texture.ID] = texture; _Textures[texture.ID] = texture;
} }
@@ -1171,10 +1169,9 @@ namespace Vocaluxe.Lib.Draw
{ {
lock (_MutexTexture) lock (_MutexTexture)
{ {
while (_Queue.Count > 0) while (_TexturesToLoad.Count > 0)
{ {
STextureQueue q = _Queue[0]; STextureQueue q = _TexturesToLoad.Dequeue();
_Queue.RemoveAt(0);
CTexture texture; CTexture texture;
if (!_Textures.TryGetValue(q.ID, out texture)) if (!_Textures.TryGetValue(q.ID, out texture))
continue; continue;