| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > тормозит рендер. |
| Автор: wolfwood1010 10.5.2012, 10: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 непонятно откуда он то ли после выполнения тела функции то ли перед ... в общем непонятно. что это такое может быть? и где копать? |