В первом примере, где вы используете 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]
, который сохраняет указанную схему нетронутой.
Производительность в управляемом коде относительно графической подсистемы неплохая. 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 имеет схожие характеристики производительности с оговоркой, что их математическая библиотека местами довольно медленная. Это ошибка реализации, о которой я говорил с ними, и, надеюсь, будет исправлена в ближайшее время.
Вы можете посмотреть на это: http://groups.google.com/group/microsoft.public.win32.programmer.directx.managed/browse_thread/thread/1fc097147796e15b
Управляемый API сейчас не поддерживается, поэтому OpenGL может быть вашим Лучшая ставка, если вы не хотите использовать XNA.
В зависимости от того, какие другие платформы вы, возможно, захотите поддерживать, например, мобильные устройства или XBox360, это может помочь вам решить, какой API использовать.
Существует управляемый API для DirectX, который предоставляет Вам доступ к API DirectX, поскольку "собственный" C# возражает. Это - огромный участок по OpenGL.
DirectX будет иметь лучшую поддержку видеодрайвера в Windows, так как это то, что MSFT использует для сертификации карт. Мы обнаружили, что поддержка OpenGL отсутствует, дает сбой или просто не подходит для более дешевых карт в Windows.
Вы, вероятно, захотите изучить механизм IrrLicht, он имеет и C++ и.Net API и это полностью Графика агностик API (значение, что можно использовать тот же код для выполнения OpenGL, или DirectX и привычка программиста даже должны знать, который Вы используете),
Вы могли бы также хотеть изучить SlimDX, очень быструю, легкую, альтернативу с открытым исходным кодом XNA
Я не чувствую, что OpenGL соответствует почти также чистой среде OO, как что-то как XNA делает. Тем не менее, если Вы действительно заботитесь о межплатформенной совместимости, она не должна иметь значения что Вы бэкенд к.
Разработайте бизнес-логику своего приложения для независимого политика от бэкенда рендеринга. Необходимо смочь включить объект рендеринга OpenGL, затем выгружают его для рендерера XNA без проблем. Мало того, что это увеличивает Вашу базу потенциальных клиентов (путем включения поддержки обоих), но делает дизайн приложения намного более хорошим.
Также маленькое примечание, DX не должен использоваться от.NET, поскольку Управляемый DirectX был удержан от использования; используйте XNA.
Это зависит, для какой платформы Вы намереваетесь быть нацеленными.
Если только необходимо быть нацелены на использование окон XNA
Для межплатформенной работы возможно, кто-то еще там сделал некоторую работу, использующую моно с openGL - я предполагаю, что Вы намереваетесь сделать графическое программное обеспечение, а не игра, таким образом имея somekind платформы как winForms была бы очень полезна для всех Ваших средств управления UI.
С OpenGL можно использовать "DirectX 10 функций" как программы построения теней геометрии на Windows XP и Linux. Используя ИЗБЫТОК очень просто разбудить демонстрационное приложение и работающий в течение минут.
Если Вам не нравится XNA, можно использовать SlimDX. В отличие от XNA, SlimDX поддерживает DirectX 10.
OpenGL, изолированный в прошлом относительно технических характеристик, но вещах, был зафиксирован в конечном счете. Для предоставления примера рассмотрите связываемые универсальные формы, где Direct3D имел более быстрый механизм, прежде чем OpenGL получил подобный. Кроме поддержки различных наборов функций время от времени, нет никакого различия.
Таким образом, если Вы не предназначаете при работе с очень новейшими функциями GPU, я советовал бы пойти с OpenGL. Смело можно сказать, нет многих областей, где OpenGL отстает в связанных с производительностью функциях.
Между прочим, C# и.NET платформенно независимы, только если Вы принимаете определенные меры предосторожности.
Различие в производительности между Direct3D и OpenGL является близким нолем. Наборы функций этих двух не отображают тот на один, но они близки. Основное, про для OpenGL, является кросс-платформенной поддержкой.
Я рекомендовал бы OpenGL по следующим причинам:-
Тем не менее требования Вашей системы и Ваших персональных предпочтений могли снабдить подсказкой его так или иначе, поскольку оба подхода являются серьезными реализациями. На оборотной стороне OpenGL является в значительной степени конечным автоматом и может быть хитрым для вписывания в OO, хотя это, конечно, не невозможно.
Править: Добавленный для разъяснения моего комментария к модели программы построения теней OpenGL, являющейся по сути превосходящим DirectX. Это вызвано тем, что программы построения теней DirectX компилируются с программой во время разработки против универсальной модели GPU, тогда как программы построения теней OpenGL сохранены как исходный код и скомпилированы драйвером OpenGL во время выполнения. Следовательно, теоретически для устройства записи драйвера возможно использовать в своих интересах конкретный (или обновленный при запущении старой программы) функции GPU и создать скомпилированный код, который может работать быстрее, чем программы построения теней DirectX. Это - маленькая точка, но потенциально вполне важная.
Я использовал и OpenGL и DirectX. Я думаю, что производительность довольно подобна. Я предпочитаю модель программирования OpenGL - особенно его обработка преобразований и прямая поддержка выбора операций. Мне не нравится способ, которым MS продолжает повторно переносить ту же функциональность каждый раз, когда это обновляет ОС, и я думаю, что OpenGL защищает Вас от этого.
Однако оба являются изворотливыми, и необходимо провести много времени, удостоверившись, что это взаимодействует приятно с платформой хост-приложения, или Windows или чем-то еще.
Вот мое честное предложение для вас: Используйте оба .
Я бы в любой день взвесил, у какого из них есть больше инструментов для завершения программу, а затем по соображениям производительности я бы использовал другую, чтобы обеспечить максимальную производительность в разных системах.
Давайте рассмотрим: производительность программы зависит от многих вещей, в основном от ваших усилий (кода приложения) и драйверов на данном компьютере. Графические API-интерфейсы являются средством взаимодействия вашего приложения с графическим процессором и, таким образом, делают вас невероятно зависимым от того, насколько хорошо данный драйвер реализован для установленного графического процессора.
Direct3D иногда на некоторых видеокартах быстрее, чем OpenGL, и это из-за поставщиков графики и их драйверов.
DirectX предлагает множество инструментов для ускорения разработки. Я понимаю, что для начала требуется очень крутая кривая обучения, но позвольте мне напомнить, что вы случайно оказались программистом. Я даже осмеливаюсь сказать, что это очень хороший.
Следовательно, вы должны быть в состоянии пробиться и медленно разрабатывать свой собственный фреймворк, который использует оба API и, таким образом, дает вам возможность тестировать и реализовывать какую бы программу вы ни имели в виду.
С уважением,
Мосса Нова Мери
Следовательно, вы должны уметь пробиваться и медленно разрабатывать свою собственную структуру, которая использует оба API и, таким образом, дает вам возможность тестировать и реализовывать любую программу, которую вы имеете в виду.
С уважением,
Мосса Нова Мери
Следовательно, вы должны уметь пробиваться и медленно разрабатывать свою собственную структуру, которая использует оба API и, таким образом, дает вам возможность тестировать и реализовывать любую программу, которую вы имеете в виду.
С уважением,
Мосса Нова Мери