DirectX или [закрытый] OpenGL

В первом примере, где вы используете rdd.toDF("name", "age"), вы явно не предоставляете схему для DataFrame. И DataFrames на самом деле просто DataSet[Row]. Следовательно, Spark выбирает наилучший тип данных на основе данных (int на основе 1 и 2).

Во втором примере вы создаете DataSet, который сохраняет тип данных на основе предоставленной схемы. Итак:

val ds = rdd.map(line => Person(line._1,line._2) ).toDS()

Создает DataSet[Person], который сохраняет указанную схему нетронутой.

9
задан Joan Venge 2 February 2009 в 21:19
поделиться

14 ответов

Производительность в управляемом коде относительно графической подсистемы неплохая. SlimDX платит немного штраф за полностью нативный код при каждом вызове в DirectX, но это ни в коем случае не является серьезным. Фактический штраф зависит от вызова - вызов в DrawPrimitive будет значительно дороже в целом, чем вызов SetRenderState, поэтому в процентном отношении вы в конечном итоге теряете намного больше вызовов SetRenderState. SlimDX включает в себя настроенную математическую библиотеку, которая в целом работает очень хорошо, хотя вы должны быть немного осторожны с ней. Профилирование, даже с помощью более простого инструмента, такого как NProf, очень быстро выделяет этот материал, поэтому его не сложно исправить.

В целом, если мы рассмотрим универсальный, полностью оптимальный код C ++ и C #, выполняющий рендеринг через D3D, версия C #, вероятно, находится в пределах 10-15% от версии C ++. Это трудно достичь, хотя; подумайте, сколько времени вы экономите, работая в C #, который вы можете применить к графическим оптимизациям более высокого уровня, на которые у вас, вероятно, просто не было бы времени, если бы вам пришлось создавать все это в C ++. И даже если вам удастся получить эти дополнительные 10% в C ++, они быстро сократятся до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

подумайте, сколько времени вы экономите, работая в C #, который вы можете применить к графическим оптимизациям более высокого уровня, на которые у вас, вероятно, просто не было бы времени, если бы вам пришлось создавать все это в C ++. И даже если вам удастся получить эти дополнительные 10% в C ++, они быстро сократятся до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

подумайте, сколько времени вы экономите, работая в C #, который вы можете применить к графическим оптимизациям более высокого уровня, на которые у вас, вероятно, просто не было бы времени, если бы вам пришлось создавать все это в C ++. И даже если вам удастся получить эти дополнительные 10% в C ++, они быстро сократятся до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

сохраняя, работая в C #, вы можете применить его к графическим оптимизациям более высокого уровня, на которые у вас, вероятно, просто не было бы времени, если бы вам пришлось создавать все это в C ++. И даже если вам удастся получить эти дополнительные 10% в C ++, они быстро сократятся до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

сохраняя, работая в C #, вы можете применить его к графическим оптимизациям более высокого уровня, на которые у вас, вероятно, просто не было бы времени, если бы вам пришлось создавать все это в C ++. И даже если вам удастся получить эти дополнительные 10% в C ++, они быстро сократятся до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

d быстро сократится до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

d быстро сократится до 5% в течение нескольких месяцев, когда новый виток оборудования прорвет код вашего приложения быстрее, чем когда-либо. Я знаю, что выбрал бы - именно поэтому я и начал писать SlimDX.

OpenTK имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена ​​в ближайшее время.

8
ответ дан 4 December 2019 в 05:52
поделиться

Вы можете посмотреть на это: http://groups.google.com/group/microsoft.public.win32.programmer.directx.managed/browse_thread/thread/1fc097147796e15b

Управляемый API сейчас не поддерживается, поэтому OpenGL может быть вашим Лучшая ставка, если вы не хотите использовать XNA.

В зависимости от того, какие другие платформы вы, возможно, захотите поддерживать, например, мобильные устройства или XBox360, это может помочь вам решить, какой API использовать.

1
ответ дан 4 December 2019 в 05:52
поделиться

Существует управляемый API для DirectX, который предоставляет Вам доступ к API DirectX, поскольку "собственный" C# возражает. Это - огромный участок по OpenGL.

0
ответ дан 4 December 2019 в 05:52
поделиться

DirectX будет иметь лучшую поддержку видеодрайвера в Windows, так как это то, что MSFT использует для сертификации карт. Мы обнаружили, что поддержка OpenGL отсутствует, дает сбой или просто не подходит для более дешевых карт в Windows.

1
ответ дан 4 December 2019 в 05:52
поделиться

Вы, вероятно, захотите изучить механизм IrrLicht, он имеет и C++ и.Net API и это полностью Графика агностик API (значение, что можно использовать тот же код для выполнения OpenGL, или DirectX и привычка программиста даже должны знать, который Вы используете),

Вы могли бы также хотеть изучить SlimDX, очень быструю, легкую, альтернативу с открытым исходным кодом XNA

1
ответ дан 4 December 2019 в 05:52
поделиться

Я не чувствую, что OpenGL соответствует почти также чистой среде OO, как что-то как XNA делает. Тем не менее, если Вы действительно заботитесь о межплатформенной совместимости, она не должна иметь значения что Вы бэкенд к.

Разработайте бизнес-логику своего приложения для независимого политика от бэкенда рендеринга. Необходимо смочь включить объект рендеринга OpenGL, затем выгружают его для рендерера XNA без проблем. Мало того, что это увеличивает Вашу базу потенциальных клиентов (путем включения поддержки обоих), но делает дизайн приложения намного более хорошим.

Также маленькое примечание, DX не должен использоваться от.NET, поскольку Управляемый DirectX был удержан от использования; используйте XNA.

1
ответ дан 4 December 2019 в 05:52
поделиться

Это зависит, для какой платформы Вы намереваетесь быть нацеленными.

Если только необходимо быть нацелены на использование окон XNA

Для межплатформенной работы возможно, кто-то еще там сделал некоторую работу, использующую моно с openGL - я предполагаю, что Вы намереваетесь сделать графическое программное обеспечение, а не игра, таким образом имея somekind платформы как winForms была бы очень полезна для всех Ваших средств управления UI.

1
ответ дан 4 December 2019 в 05:52
поделиться

С OpenGL можно использовать "DirectX 10 функций" как программы построения теней геометрии на Windows XP и Linux. Используя ИЗБЫТОК очень просто разбудить демонстрационное приложение и работающий в течение минут.

2
ответ дан 4 December 2019 в 05:52
поделиться

Если Вам не нравится XNA, можно использовать SlimDX. В отличие от XNA, SlimDX поддерживает DirectX 10.

2
ответ дан 4 December 2019 в 05:52
поделиться

OpenGL, изолированный в прошлом относительно технических характеристик, но вещах, был зафиксирован в конечном счете. Для предоставления примера рассмотрите связываемые универсальные формы, где Direct3D имел более быстрый механизм, прежде чем OpenGL получил подобный. Кроме поддержки различных наборов функций время от времени, нет никакого различия.

Таким образом, если Вы не предназначаете при работе с очень новейшими функциями GPU, я советовал бы пойти с OpenGL. Смело можно сказать, нет многих областей, где OpenGL отстает в связанных с производительностью функциях.

Между прочим, C# и.NET платформенно независимы, только если Вы принимаете определенные меры предосторожности.

7
ответ дан 4 December 2019 в 05:52
поделиться

Различие в производительности между Direct3D и OpenGL является близким нолем. Наборы функций этих двух не отображают тот на один, но они близки. Основное, про для OpenGL, является кросс-платформенной поддержкой.

12
ответ дан 4 December 2019 в 05:52
поделиться

Я рекомендовал бы OpenGL по следующим причинам:-

  1. Кросс-платформенный - OpenGLES, являющийся конкретной уместности в эти дни для Мобильных платформ
  2. OpenGL, заштриховывающий реализацию языка, по сути превосходит программы построения теней DirectX.
  3. OpenGL несколько легче изучить, поскольку возможно настроить основной рендеринг с очень немногими строками кода
  4. Философски OpenGL был разработан как механизм визуализации общего назначения, тогда как DirectX всегда был ориентируемыми играми, таким образом, OpenGL будет казаться лучшим пригодным для Вашего вопроса.
  5. OpenGL является стабильной технологией, которая была вокруг в течение некоторого времени и продолжит быть так. DirectX более зависит от прихоти Microsoft и мог быть удержан от использования немедленно, если MS чувствовал себя подобно ему.

Тем не менее требования Вашей системы и Ваших персональных предпочтений могли снабдить подсказкой его так или иначе, поскольку оба подхода являются серьезными реализациями. На оборотной стороне OpenGL является в значительной степени конечным автоматом и может быть хитрым для вписывания в OO, хотя это, конечно, не невозможно.

Править: Добавленный для разъяснения моего комментария к модели программы построения теней OpenGL, являющейся по сути превосходящим DirectX. Это вызвано тем, что программы построения теней DirectX компилируются с программой во время разработки против универсальной модели GPU, тогда как программы построения теней OpenGL сохранены как исходный код и скомпилированы драйвером OpenGL во время выполнения. Следовательно, теоретически для устройства записи драйвера возможно использовать в своих интересах конкретный (или обновленный при запущении старой программы) функции GPU и создать скомпилированный код, который может работать быстрее, чем программы построения теней DirectX. Это - маленькая точка, но потенциально вполне важная.

25
ответ дан 4 December 2019 в 05:52
поделиться

Я использовал и OpenGL и DirectX. Я думаю, что производительность довольно подобна. Я предпочитаю модель программирования OpenGL - особенно его обработка преобразований и прямая поддержка выбора операций. Мне не нравится способ, которым MS продолжает повторно переносить ту же функциональность каждый раз, когда это обновляет ОС, и я думаю, что OpenGL защищает Вас от этого.

Однако оба являются изворотливыми, и необходимо провести много времени, удостоверившись, что это взаимодействует приятно с платформой хост-приложения, или Windows или чем-то еще.

2
ответ дан 4 December 2019 в 05:52
поделиться

Вот мое честное предложение для вас: Используйте оба .

Совет

Я бы в любой день взвесил, у какого из них есть больше инструментов для завершения программу, а затем по соображениям производительности я бы использовал другую, чтобы обеспечить максимальную производительность в разных системах.

Мысли о дискуссии

Давайте рассмотрим: производительность программы зависит от многих вещей, в основном от ваших усилий (кода приложения) и драйверов на данном компьютере. Графические API-интерфейсы являются средством взаимодействия вашего приложения с графическим процессором и, таким образом, делают вас невероятно зависимым от того, насколько хорошо данный драйвер реализован для установленного графического процессора.

Мой выбор

Direct3D иногда на некоторых видеокартах быстрее, чем OpenGL, и это из-за поставщиков графики и их драйверов.

DirectX предлагает множество инструментов для ускорения разработки. Я понимаю, что для начала требуется очень крутая кривая обучения, но позвольте мне напомнить, что вы случайно оказались программистом. Я даже осмеливаюсь сказать, что это очень хороший.

Заключение

Следовательно, вы должны быть в состоянии пробиться и медленно разрабатывать свой собственный фреймворк, который использует оба API и, таким образом, дает вам возможность тестировать и реализовывать какую бы программу вы ни имели в виду.

С уважением,

Мосса Нова Мери

Заключение

Следовательно, вы должны уметь пробиваться и медленно разрабатывать свою собственную структуру, которая использует оба API и, таким образом, дает вам возможность тестировать и реализовывать любую программу, которую вы имеете в виду.

С уважением,

Мосса Нова Мери

Заключение

Следовательно, вы должны уметь пробиваться и медленно разрабатывать свою собственную структуру, которая использует оба API и, таким образом, дает вам возможность тестировать и реализовывать любую программу, которую вы имеете в виду.

С уважением,

Мосса Нова Мери

4
ответ дан 4 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: