Здравствуйте Igor Trofimov, Вы писали:
ZEN>>Видели? Меньше секунды! ZEN>>А говорят, что Swing тормозит.
IT>1. При чем тут свинг? IT>2. Давно уж выяснили, что причина тормознутости — в GDI+. Напиши с использованием GDI+ (если это возможно на жабе) — вот тогда будет адекватно. IT>3. Ты ж писал тесты для Дельфи тоже — ну так и тест отрисовки продублируй что-ли на Дельфе...интересно.
Дались Вам эти пчелы... Зачем заставлять библиотеку делать то, для чего она не предназначена...
Вот этот код на той-же машине уже работает раз в 10 быстрее...
using (Bitmap Bitmap = new Bitmap(Width, Height))
{
using (Graphics Graphics = Graphics.FromImage(Bitmap))
{
using ( Pen p1 = new Pen(Color.Black),
p2 = new Pen(Color.White) )
{
for (int x = 0; x < Width; x++)
if ( (x & 1) > 0)
Graphics.DrawLine(p1, x, 0, x, Height-1);
else
Graphics.DrawLine(p2, x, 0, x, Height-1);
}
}
e.Graphics.DrawImageUnscaled(Bitmap, 0, 0);
}
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте iZEN, Вы писали:
ZEN>Здравствуйте Igor Trofimov, Вы писали:
ZEN>>>Видели? Меньше секунды! ZEN>>>А говорят, что Swing тормозит.
IT>>1. При чем тут свинг? IT>>2. Давно уж выяснили, что причина тормознутости — в GDI+. Напиши с использованием GDI+ (если это возможно на жабе) — вот тогда будет адекватно. IT>>3. Ты ж писал тесты для Дельфи тоже — ну так и тест отрисовки продублируй что-ли на Дельфе...интересно.
А если линии сделать толщиной например 10 и пусть они будут с небольшим наклоном (грудусов 10 например)... Одна например синяя, а другая красная с коэффициэнтом прозрачности 0.1 и 0.2 соответственно... Что-бы это было явно видно выведем их поверх какой-нибудь картинки... (то, что линии рисуются с эффектом сглаживания — это само собой ясно)
Какие тогда тогда будут соотношения производительности? (ява, дельфи, .NET)
ZEN>Это было сделано на той же платформе: PentiumII/350МГц/128Мбайт PC133 RAM/Riva TNT2 ZEN>ОС: Windows2000 Proffessional RUS, Service Pack 2 ZEN>IDE: Delphi 6 Enterprise Edition. ZEN>Отожрано памяти другими приложениями порядка 160 Мб.
ZEN>Вывод: Java2 v.1.4.0 Swing ничуть не уступает по скорости приложениям Delphi 6 с выполнением простой 2D графики через GDI. ZEN>
На дворе 21-й век. Кому нужна примитивная графика?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте TK, Вы писали:
TK>Здравствуйте Igor Trofimov, Вы писали:
ZEN>>>Видели? Меньше секунды! ZEN>>>А говорят, что Swing тормозит. :)))
IT>>1. При чем тут свинг? IT>>2. Давно уж выяснили, что причина тормознутости — в GDI+. Напиши с использованием GDI+ (если это возможно на жабе) — вот тогда будет адекватно. IT>>3. Ты ж писал тесты для Дельфи тоже — ну так и тест отрисовки продублируй что-ли на Дельфе...интересно.
TK>Дались Вам эти пчелы... Зачем заставлять библиотеку делать то, для чего она не предназначена... TK>Вот этот код на той-же машине уже работает раз в 10 быстрее...
TK>
TK>using (Bitmap Bitmap = new Bitmap(Width, Height))
TK>{
TK> using (Graphics Graphics = Graphics.FromImage(Bitmap))
TK> {
TK> using ( Pen p1 = new Pen(Color.Black),
TK> p2 = new Pen(Color.White) )
TK> {
TK> for (int x = 0; x < Width; x++)
TK> if ( (x & 1) > 0)
TK> Graphics.DrawLine(p1, x, 0, x, Height-1);
TK> else
TK> Graphics.DrawLine(p2, x, 0, x, Height-1);
TK> }
TK> }
TK> e.Graphics.DrawImageUnscaled(Bitmap, 0, 0);
TK>}
TK>
А вот этот код во сколько раз быстрее? :))
package drawtest;
/**
* Title: Тест отрисовки в 2D
* Description: Простой тест на скорость заполнения линиями разного цвета формы 1024x768
* Copyright: Copyright (c) 06.08.2002
* @author iZEN
* @version 1.1
*/import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
public class DrawTestFrame extends JFrame {
/**Construct the frame*/public DrawTestFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
} catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/private void jbInit() throws Exception {
this.setSize(new Dimension(1024, 768));
this.setTitle("Draw Test");
}
/**Overridden so we can exit when window is closed*/protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public void paint(Graphics g) {
super.paint(g);
paint2D(g);
}
private boolean firstTime = true;//Флагинициализации буфераprivate BufferedImage bi = null;//Буферный кадрprivate Graphics2D big = null;//Буферный 2Dpublic void paint2D(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
if (firstTime){
Dimension dim = this.getSize();
int w = dim.width;
int h = dim.height;
bi = (BufferedImage)createImage(w, h);
big = bi.createGraphics();
big.setColor(Color.white);
big.clearRect(0, 0, w, h);
for (int i = 0; i < w; i++) {
if ((i&1) == 0)
big.setColor(Color.black);
else
big.setColor(Color.white);
Line2D line = new Line2D.Double(i, 0, i, h);
big.draw(line);
}
firstTime = false;
}
long st = System.currentTimeMillis();
// Draws the buffered image to the screen.
g2.drawImage(bi, 0, 0, this);
System.out.println("Время отрисовки в Graphics2D: " + (System.currentTimeMillis() - st) + " миллисекунд");
}
public static void main(String[] args) {
DrawTestFrame frame = new DrawTestFrame();
frame.setVisible(true);
}
}
Замечание
Строчка:
Line2D line = new Line2D.Double(i, 0, i, h);
создаёт линию с координатами в действительном пространстве (плавающая точка! как в GDI+).
Консольный вывод после нескольких сворачиваний/разворачиваний/перекрытий/изм.размеров окна:
Время отрисовки в Graphics2D: 40 миллисекунд
Время отрисовки в Graphics2D: 471 миллисекунд
Время отрисовки в Graphics2D: 50 миллисекунд
Время отрисовки в Graphics2D: 30 миллисекунд
Время отрисовки в Graphics2D: 40 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Время отрисовки в Graphics2D: 0 миллисекунд
Платформа:
PentiumII/350МГц/128Мбайт PC133 RAM/Riva TNT2-32Мб
ОС: Windows2000 Proffessional RUS, Service Pack 2
Sun Java2 Platform, Standard Edition v.1.4.0 (Java; VM; Vendor = 1.4.0; Java HotSpot(TM) Client VM 1.4.0-b92; Sun Microsystems Inc.)
На момент запуска отожрано памяти другими процессами порядка 205 Мбайт.
:))
P.S. Двойная буферизация, конечно, иногда всё "исправляет" в плане быстродействия. :-\
TK>Дались Вам эти пчелы... Зачем заставлять библиотеку делать то, для чего она не предназначена... TK>Вот этот код на той-же машине уже работает раз в 10 быстрее...
Слушай, почитай тред с самого начала, а?
Уже сто раз всем объяснял, что пример приводился ИСКЛЮЧИТЕЛЬНО ДЛЯ ПРОВЕРКИ СКОРОСТИ РИСОВАНИЯ В .NET.
Соответственно, мне НЕ НУЖНА ТУТ СКОРОСТЬ. Мне нужна была оценка времени исполнения АНАЛОГИЧНОГО КОДА по сравнению с другими платформами.
Выяснили вроде, что тормозит GDI+, потому что в .NET это стандарт рисования, а аппаратно он пока не поддержан. Все, вроде бы тема закрыта, нет, подняли снова.... Ну, впрочем, вот IZEN на жабе аналогичный тест привел... за что ему наша большая человеческая благодарность...
Правда, надо бы по-хорошему, увеличить хотя бы на порядок трудоемкость тестов... 20-30 мс — это слишком мало..там погрешность велика и всякие мелкие накладные расходы... надо бы, чтобы самые быстрые около секунды выполняли.
У меня встречная просьба (не откажите уж).
Пожалуйста, укажите платформу, на которой вы проводили свой тест.
Хочется оценить показатели.
IT>Правда, надо бы по-хорошему, увеличить хотя бы на порядок трудоемкость тестов... 20-30 мс — это слишком мало..там погрешность велика и всякие мелкие накладные расходы... надо бы, чтобы самые быстрые около секунды выполняли.
Конечно, это легко сделать, вычерчивая замысловатые, но простые фигуры (окружности, овалы, дуги и т.д.), которые отрабатываются в основном командами GDI/GDI+/Net, а не прикладным кодом.
Тогда и можно будет посмотреть реальную работу ядра GDI/GDI+/Net.
Здравствуйте TK, Вы писали:
TK>А если линии сделать толщиной например 10 и пусть они будут с небольшим наклоном (грудусов 10 например)... Одна например синяя, а другая красная с коэффициэнтом прозрачности 0.1 и 0.2 соответственно... Что-бы это было явно видно выведем их поверх какой-нибудь картинки... (то, что линии рисуются с эффектом сглаживания — это само собой ясно)
От наклона линий производительность, по крайней мере в Java2, не зависит! Я уже убедился на собственном опыте. Толщина линий и альфа-канал предполагают заливку, а вот где это будет происходить: в самом ядре GDI/GDI+ или на прикладном уровне библиотек я пока не изучал и не знаю. Из примеров к JSDK, в частности jdk\Demo\jfc\Java2D\Java2Demo.jar, можно оценить производительность 2D-графики с включенным и с выключенным альфа-каналом, с текстурированием, с анти-алиасингом. "Вклад" каждой из составляющих -- порядка 20..30% уменьшения производительности на слабых машинках и 3..5% -- на современных монстрах. Кроме того, многое зависит от прикладного кода библиотек и приложения, возможна серьёзная оптимизация и на этом уровне.
TK>Какие тогда тогда будут соотношения производительности? (ява, дельфи, .NET)
Я думаю, соотношения будут равными (когда .Net окончательно доделают:))). Но на сегодня: Java чуть-чуть отстаёт от Delphi на вычислительных задачах, но серьёзно (иногда в 2-3 раза) обгоняет её на комбинаторных алгоритмах (строки, буферы, потоки данных).
TK>На дворе 21-й век. Кому нужна примитивная графика?
Всем. Или вы решили использовать OpenGL и DirectX для отрисовки иконок на кнопках? :))
Здравствуйте iZEN, Вы писали:
ZEN>Здравствуйте TK, Вы писали:
ZEN>От наклона линий производительность, по крайней мере в Java2, не зависит! Я уже убедился на собственном опыте. Толщина линий и альфа-канал предполагают заливку, а вот где это будет происходить: в самом ядре GDI/GDI+ или на прикладном уровне библиотек я пока не изучал и не знаю. Из примеров к JSDK, в частности jdk\Demo\jfc\Java2D\Java2Demo.jar, можно оценить производительность 2D-графики с включенным и с выключенным альфа-каналом, с текстурированием, с анти-алиасингом. "Вклад" каждой из составляющих -- порядка 20..30% уменьшения производительности на слабых машинках и 3..5% -- на современных монстрах. Кроме того, многое зависит от прикладного кода библиотек и приложения, возможна серьёзная оптимизация и на этом уровне.
Я и не говорил, что она от наклона зависит Так сглаживание лучше видно...
PS.
А на современных монстрах, что аппаратное ускорение для 2D графики включается? Благодаря чему экономится достигается подобная экономия?
TK>>Какие тогда тогда будут соотношения производительности? (ява, дельфи, .NET) ZEN>Я думаю, соотношения будут равными (когда .Net окончательно доделают. Но на сегодня: Java чуть-чуть отстаёт от Delphi на вычислительных задачах, но серьёзно (иногда в 2-3 раза) обгоняет её на комбинаторных алгоритмах (строки, буферы, потоки данных).
А причем тут доработки .NET и GDI+ (единственное, что только появились примерно в одно время)?
TK>>На дворе 21-й век. Кому нужна примитивная графика?
ZEN>Всем. Или вы решили использовать OpenGL и DirectX для отрисовки иконок на кнопках?
До этого пока еще не дошло... А сглаживание, полупрозрачность это нужно уже сейчас.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте TK.
TK>А если линии сделать толщиной например 10 и пусть они будут с небольшим наклоном (грудусов 10 например)... Одна например синяя, а другая красная с коэффициэнтом прозрачности 0.1 и 0.2 соответственно... Что-бы это было явно видно выведем их поверх какой-нибудь картинки... (то, что линии рисуются с эффектом сглаживания — это само собой ясно) TK>Какие тогда тогда будут соотношения производительности? (ява, дельфи, .NET)
Встречное предложение.
Давайте протестируем приложения, работающие в 3D-графике и использующие OpenGL и DirectX.
Это не проблема для Delphi(оболочки прямых вызовов API библиотек) и Java(с пакетом Java3D под эти два интерфейса).
А как обстоят дела с 3D в .Net?
Если соберёмся, то хочется оценить несколько параметров, в частности: быстродействие вызовов "сервера" OpenGL/DirectX прикладным кодом; трудоёмкость написания приложения (грубо: количество строк кода); функциональность на количество строк -- тоже грубо.:user:
Здравствуйте iZEN, Вы писали:
ZEN>Здравствуйте TK.
TK>>А если линии сделать толщиной например 10 и пусть они будут с небольшим наклоном (грудусов 10 например)... Одна например синяя, а другая красная с коэффициэнтом прозрачности 0.1 и 0.2 соответственно... Что-бы это было явно видно выведем их поверх какой-нибудь картинки... (то, что линии рисуются с эффектом сглаживания — это само собой ясно) TK>>Какие тогда тогда будут соотношения производительности? (ява, дельфи, .NET)
ZEN>Встречное предложение. ZEN>Давайте протестируем приложения, работающие в 3D-графике и использующие OpenGL и DirectX. ZEN>Это не проблема для Delphi(оболочки прямых вызовов API библиотек) и Java(с пакетом Java3D под эти два интерфейса). ZEN>А как обстоят дела с 3D в .Net?
ZEN>Если соберёмся, то хочется оценить несколько параметров, в частности: быстродействие вызовов "сервера" OpenGL/DirectX прикладным кодом; трудоёмкость написания приложения (грубо: количество строк кода); функциональность на количество строк -- тоже грубо.:user:
Никаких проблем MC++ и OpenGL.
DirectX — так с использованием COM объектов тоже никаких проблем нет...
Может быть .NET это и новая разработка, но использовать старые никто не запрещал :)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
ZEN>Всем. Или вы решили использовать OpenGL и DirectX для отрисовки иконок на кнопках?
К тому все идет. Не мы, так MS
Кнопки будут делать с шершавыми текстурами и bumpmapping'ом — чтобы больше на настоящие походили, тень отбрасывали реалистичную...