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

C#中 Queue是连续内存吗?该如何解决

2012-05-07 
C#中 Queue是连续内存吗?我看了MSDN感觉好像是连续内存不过我感觉像Stack Queue这种集合,为什么要用连续内

C#中 Queue是连续内存吗?
我看了MSDN感觉好像是连续内存
不过我感觉像Stack Queue这种集合,为什么要用连续内存呢?
如果用非连续内存效率应该会高一些啊?
不理解,求问

另外,Queue中的TrimExcess是什么意思啊?我看MSDN上的解释,没看懂!


[解决办法]
Queue先进先出,一般元素个数不多,使用连续内存更节省空间,
[解决办法]
from msdn

Queue<T> 的容量是指 Queue<T> 可以容纳的元素数。 当向 Queue<T> 添加元素时,将通过重新分配内部数组,根据需要自动增大容量。 可通过调用 TrimExcess 来减少容量。 

这说明它的确是连续的。不过对于引用类型,这关系不大。
[解决办法]
可以看看压入和弹出队列元素时的源代码

C# code
public void Enqueue(T item){    if (this._size == this._array.Length)    {        int capacity = (int) ((this._array.Length * 200L) / 100L);        if (capacity < (this._array.Length + 4))        {            capacity = this._array.Length + 4;        }        this.SetCapacity(capacity);    }    this._array[this._tail] = item;    this._tail = (this._tail + 1) % this._array.Length;    this._size++;    this._version++;}public T Dequeue(){    if (this._size == 0)    {        ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EmptyQueue);    }    T local = this._array[this._head];    this._array[this._head] = default(T);    this._head = (this._head + 1) % this._array.Length;    this._size--;    this._version++;    return local;} 

热点排行