powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Быстрая отрисовка большого колличества полигонов
6 сообщений из 6, страница 1 из 1
Быстрая отрисовка большого колличества полигонов
    #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
Быстрая отрисовка большого колличества полигонов
    #32089205
Kulibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я его сделал
Оказывается есть такая вещь как большие объекты - это когода >85 000 так вот они по памяти не оптимизируются - выделяем размер массива скажем побольше и все ок работает как часы
...
Рейтинг: 0 / 0
Быстрая отрисовка большого колличества полигонов
    #32090065
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>.Net помему время от времени делает оптимизацию памяти
это называется уборка мусора таким образом(и только таким) C# возвращает память после уничтожения объектов. В вашем случае имеет место так называемый "Небезопастный код" и при объявлении подобных объектов надо использовать модификатор unsafe
...
Рейтинг: 0 / 0
Быстрая отрисовка большого колличества полигонов
    #32090077
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так пиши ответ, чтоб если кто столкнётся с такой проблемой тут же нашёл и решение...
...
Рейтинг: 0 / 0
Быстрая отрисовка большого колличества полигонов
    #32090091
Маveric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне кажется Latuk не прав. Помоему Kulibin хотел просто зафиксировать объект в памяти(существующий), я думаю Unsafe код тут не причем.
...
Рейтинг: 0 / 0
Быстрая отрисовка большого колличества полигонов
    #32090762
Kulibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут не совсем понял что про меня говорят
Передомной стояла задача рисовать в кадре много тысяч полигонов, есть массив координат (2 массива если точнее)
далее если я перед вызовом отрисовки полигона делаю новый массив и посылаю на отрисовку, то через 3-4 отрисовки кадра, вызывается жестокая сборка мусора, компьютер подвисает на неопределенное время.
Если я определил мой массив очень большим, (структура массива такова (одномерного) что перед первым элементом массива идет колличество элементов) изменяем колличество элементов, выводим, и возращаем заново предыдущее колличество.
В таком варианте, сборка у меня вообще не запускалась, по крайней мере так что бы я это заметил, ощее время получается в несколько раз меньше

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


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