Re[10]: WPF vs WinForms
От: Silver_s Ниоткуда  
Дата: 29.04.10 09:35
Оценка:
Здравствуйте, Ikemefula, Вы писали:

S_>> Нарисуй 200x200 примитивов через drawingContext.DrawRectangle, GDI+ в разы быстрее, Direct3D/2D еще в разы быстрее.

I>Не знаю, как ты сравнивал. покажи код.

Вот все что на WinForms требуется, эта беда за мышкой двигается. Попробуй напиши то же самое на WPF.
Только не предлагать двигать сам контрол со статическим рисунком, также не предлагать двигать рукой сам монитор
И вариант с WPF желательно не на 250 Ватных карточках запускать.
Если приведешь код на WPF который хотя бы не более чем в 2 раза медленнее чем WinForms GDI+, скажу огромное спасибо.

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();

            DoubleBuffered = true;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            var g=e.Graphics;
            g.Clear(Color.White);
            for (int i = 0; i < 900; i += 900 / 200)
                for (int j = 0; j < 900; j += 900 /200)
                {
                    g.DrawRectangle(Pens.Black, x + i, y+j, 5, 5);
                }
        }
        int x, y;
        private void UserControl1_MouseMove(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            Invalidate();
        }
    }


На WPF как-то так

            Pen myPen = new Pen(Brushes.Blue, 1);
            myPen.Freeze();
            Rect myRect = new Rect(0, 0, 5, 5);

            for (int i = 0; i < 900; i += 900 / 200)
                for (int j = 0; j < 900; j += 900 /200)
                {
                    Rect r = myRect;
                    r.Offset(dp.X + i, dp.Y + j);
                    drawingContext.DrawRectangle(null, myPen, r);

                }
Re[10]: WPF vs WinForms
От: Silver_s Ниоткуда  
Дата: 29.04.10 09:55
Оценка:
Здравствуйте, MxMsk, Вы писали:
MM>О, ну да, 200x200 прямоугольничков в разы нужнее вращающегося кубика
Одного кубика мало. Хотя бы 1000 кубиков надо
Попробуй нарисуй полностью кастомный контрол на WPF, какой нибудь сложный грид совмещенный с группированием через раскрывающиеся узлы как в TreeView, с большим числом ячеек, со сложной структурой ячеек,редактированием. Тогда все слабости WPF раскроются во всей красе, и архитектурные и по производительности.
Для формирования документов в стиле HTML конечно WPF хорош но этого мало.
Re[11]: WPF vs WinForms
От: Codechanger Россия  
Дата: 29.04.10 09:58
Оценка:
Здравствуйте, Silver_s, Вы писали:

S_>Здравствуйте, MxMsk, Вы писали:

MM>>О, ну да, 200x200 прямоугольничков в разы нужнее вращающегося кубика
S_> Одного кубика мало. Хотя бы 1000 кубиков надо
S_>Попробуй нарисуй полностью кастомный контрол на WPF, какой нибудь сложный грид совмещенный с группированием через раскрывающиеся узлы как в TreeView, с большим числом ячеек, со сложной структурой ячеек,редактированием. Тогда все слабости WPF раскроются во всей красе, и архитектурные и по производительности.
S_> Для формирования документов в стиле HTML конечно WPF хорош но этого мало.
Кагбэ лечится виртуализацией, пейджингом и т.д.Кривизна интерфейса(как и его тормоза) обычно в большей степени зависят от автора, а не от технологии.

[offtop]Эта... как только появляется настолько сложный интерфейс(деревья в гриде, большое число ячеек и т.д.), я сразу задаюсь вопросом — а на кой ляд все это надо? Работать ведь не оч удобно.[/offtop].
Re[11]: WPF vs WinForms
От: yuriylsh  
Дата: 30.04.10 05:13
Оценка: 1 (1)
Здравствуйте, Silver_s, Вы писали:

S_>Если приведешь код на WPF который хотя бы не более чем в 2 раза медленнее чем WinForms GDI+, скажу огромное спасибо.



Легко (тут Window а не узерконтрол, ну да я надеюсь к этому ты не будешь придираться)

public partial class MainWindow : Window
    {
        private WriteableBitmap wb = new WriteableBitmap(300, 300, 96, 96, PixelFormats.Pbgra32, null);
        public MainWindow()
        {
            InitializeComponent();
            
            image.Source = wb;
            image.MouseMove += new MouseEventHandler(image_MouseMove);
        }

        void image_MouseMove(object sender, MouseEventArgs e)
        {
            var p = e.GetPosition((IInputElement)sender);

            wb.Lock();
            var bmp = new System.Drawing.Bitmap(wb.PixelWidth, wb.PixelHeight,
                                     wb.BackBufferStride,
                                     System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
                                     wb.BackBuffer); // :D
            var g = System.Drawing.Graphics.FromImage(bmp); 
            g.Clear(System.Drawing.Color.White);
            for (int i = 0; i < 900; i += 1000 / 200)
                for (int j = 0; j < 900; j += 1000 / 200)
                {
                    g.DrawRectangle(System.Drawing.Pens.Black, (int)p.X + i,  (int)p.Y + j, 5, 5);
                }            
            g.Dispose();
            bmp.Dispose();
            wb.AddDirtyRect(new Int32Rect(0, 0, 300, 300));
            wb.Unlock();            
        }
    }
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
Re[12]: WPF vs WinForms
От: yuriylsh  
Дата: 30.04.10 05:16
Оценка:
упс, должно быть i += 900 / 200 а не i += 1000 / 200
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
Re[12]: WPF vs WinForms
От: Silver_s Ниоткуда  
Дата: 30.04.10 12:37
Оценка:
Здравствуйте, yuriylsh, Вы писали:
Хорошо хоть такая возможность всегда есть. Но Direct2D такое не обгонит. Разве что в D2D тоже битмапы заготавливать для WPF.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.