Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Быстрая отрисовка большого колличества полигонов / 6 сообщений из 6, страница 1 из 1
10.01.2003, 22:00
    #32089118
Kulibin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
Написал тут клас

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 раз быстрее обычного изменения размерности массива.

Где-то видел запрет на перестановку по памяти объекта, может кто-нибудь знает?
...
Рейтинг: 0 / 0
11.01.2003, 17:40
    #32089205
Kulibin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
Я его сделал
Оказывается есть такая вещь как большие объекты - это когода >85 000 так вот они по памяти не оптимизируются - выделяем размер массива скажем побольше и все ок работает как часы
...
Рейтинг: 0 / 0
14.01.2003, 10:38
    #32090065
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
>.Net помему время от времени делает оптимизацию памяти
это называется уборка мусора таким образом(и только таким) C# возвращает память после уничтожения объектов. В вашем случае имеет место так называемый "Небезопастный код" и при объявлении подобных объектов надо использовать модификатор unsafe
...
Рейтинг: 0 / 0
14.01.2003, 10:47
    #32090077
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
так пиши ответ, чтоб если кто столкнётся с такой проблемой тут же нашёл и решение...
...
Рейтинг: 0 / 0
14.01.2003, 11:06
    #32090091
Маveric
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
А мне кажется Latuk не прав. Помоему Kulibin хотел просто зафиксировать объект в памяти(существующий), я думаю Unsafe код тут не причем.
...
Рейтинг: 0 / 0
14.01.2003, 22:28
    #32090762
Kulibin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая отрисовка большого колличества полигонов
Я тут не совсем понял что про меня говорят
Передомной стояла задача рисовать в кадре много тысяч полигонов, есть массив координат (2 массива если точнее)
далее если я перед вызовом отрисовки полигона делаю новый массив и посылаю на отрисовку, то через 3-4 отрисовки кадра, вызывается жестокая сборка мусора, компьютер подвисает на неопределенное время.
Если я определил мой массив очень большим, (структура массива такова (одномерного) что перед первым элементом массива идет колличество элементов) изменяем колличество элементов, выводим, и возращаем заново предыдущее колличество.
В таком варианте, сборка у меня вообще не запускалась, по крайней мере так что бы я это заметил, ощее время получается в несколько раз меньше

то что код не безопасный меня не волнует, нечего страшного он нед делает, одна проверка все решает!!!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Быстрая отрисовка большого колличества полигонов / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]