|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
Написал тут клас 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 раз быстрее обычного изменения размерности массива. Где-то видел запрет на перестановку по памяти объекта, может кто-нибудь знает? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 22:00 |
|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
Я его сделал Оказывается есть такая вещь как большие объекты - это когода >85 000 так вот они по памяти не оптимизируются - выделяем размер массива скажем побольше и все ок работает как часы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2003, 17:40 |
|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
>.Net помему время от времени делает оптимизацию памяти это называется уборка мусора таким образом(и только таким) C# возвращает память после уничтожения объектов. В вашем случае имеет место так называемый "Небезопастный код" и при объявлении подобных объектов надо использовать модификатор unsafe ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2003, 10:38 |
|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
так пиши ответ, чтоб если кто столкнётся с такой проблемой тут же нашёл и решение... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2003, 10:47 |
|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
А мне кажется Latuk не прав. Помоему Kulibin хотел просто зафиксировать объект в памяти(существующий), я думаю Unsafe код тут не причем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2003, 11:06 |
|
Быстрая отрисовка большого колличества полигонов
|
|||
---|---|---|---|
#18+
Я тут не совсем понял что про меня говорят Передомной стояла задача рисовать в кадре много тысяч полигонов, есть массив координат (2 массива если точнее) далее если я перед вызовом отрисовки полигона делаю новый массив и посылаю на отрисовку, то через 3-4 отрисовки кадра, вызывается жестокая сборка мусора, компьютер подвисает на неопределенное время. Если я определил мой массив очень большим, (структура массива такова (одномерного) что перед первым элементом массива идет колличество элементов) изменяем колличество элементов, выводим, и возращаем заново предыдущее колличество. В таком варианте, сборка у меня вообще не запускалась, по крайней мере так что бы я это заметил, ощее время получается в несколько раз меньше то что код не безопасный меня не волнует, нечего страшного он нед делает, одна проверка все решает!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2003, 22:28 |
|
|
start [/forum/topic.php?fid=20&fpage=1052&tid=1440222]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 282ms |
total: | 414ms |
0 / 0 |