тормозит рендер.

 
0
 
.NET
ava
wolfwood1010 | 10.05.2012, 11:01
есть некая функция занимающаяся рендером на image, работает она в отдельном потоке.
void RenderImgs(object sender)
{
while (true)
{
this.Dispatcher.Invoke((Action)delegate()
{
this.RenderTargets();
});

Thread.Sleep(50);
}

}

тело функции выглядит приблизительно так
void RenderTargets()
{
Rect tmpR = RenderbleRect.RetRect(CurentX, CurentY, Zoom);

CroppedBitmap cb = new CroppedBitmap(RenderbleRect.Src,
new Int32Rect((int)tmpR.Left, (int)tmpR.Top, (int)tmpR.Width, (int)tmpR.Height));


DrawingVisual dv = new DrawingVisual();
using (DrawingContext dx = dv.RenderOpen())
{

dx.DrawImage(cb, new Rect(0, 0, PART_Image.ActualWidth, PART_Image.ActualHeight));

....
....
}

RenderTargetBitmap bmp = new RenderTargetBitmap((int)PART_Image.ActualWidth, (int)PART_Image.ActualHeight, 96.0, 96.0, PixelFormats.Pbgra32);

bmp.Render(dv);
PART_Image.BeginInit(); //вроде это даже и не нужно
PART_Image.Source = bmp;
PART_Image.Stretch = Stretch.Fill;
PART_Image.EndInit(); //как и это



cb = null;

FreeMem();

}

// нужен иначе прилага съедает всю память.
void FreeMem()
{
GC.Collect(3);
GC.WaitForPendingFinalizers();
GC.Collect(3);
}


в целом все неплохо рендер выполняется гдето за 100ms задерка перед следующим рендером 50.
но помимо этого бывает (гдето раз в 10-20 рендеров) ещё некий лаг в 500-600 ms непонятно откуда он то ли после выполнения тела функции то ли перед ... в общем непонятно.

что это такое может быть? и где копать?


Comments (0)

Comments are not added

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit