Написал тут клас
public class DinamicArray: IDisposable { int Count; Point[] mas;
public DinamicArray(int count) { mas=new Point[count]; Count=count; } ~DinamicArray() { Dispose(); } unsafe public void Dispose() { fixed(Point* k=&mas[0]) { (k-1)->Y=Count; }
}
public Point[] Mas{get{return mas;}} unsafe public int Length { get{return mas.Length;} set { if (value>Count) redim(value); else { fixed(Point* k=&mas[0]) { (k-1)->Y=value; } } } }
unsafe public void redim(int newCount) { fixed(Point* k=&mas[0]) { (k-1)->Y=Count; } mas=new Point[newCount]; Count=newCount; } } }
А это его использование
Dim paoints as Point paoints=masCalas.mas()
А теперь в массиве прокручиваем очень много раз masCalas.Length = какое-то число
'определили массив g.FillPolygon(bb, paoints) masCalas.Length=наше старое число
Но вот не задача получается что .Net помему время от времени делает оптимизацию памяти, поэтому программа очень часто вырубается. Выходов за гранницу массива нет.
Если не вырубается то работает в 100 раз быстрее обычного изменения размерности массива.
Где-то видел запрет на перестановку по памяти объекта, может кто-нибудь знает?
Ответить
|