• Как запустить проект С# на другом пк?

    Nipheris
    @Nipheris Куратор тега C#
    Во-первых, как уже отметил GavriKos, соберите проект в Release-конфигурации - exe-шник, собранный в релизе, будет оптимизирован не для отладки, а для использования в продакшене. Во-вторых, определитесь с версиями Винды, на которых будете запускать проект - с 7-кой идет .net 3.5 (включающий в себя 3.0 и 2.0), c 8-кой - 4.5 (который включает в себя 4.0). Если попали в эти пары версия ОС/версия .net - то отдельно фреймворк ставить не надо, если не попали (например, ваше приложение под .net 4.5 нужно запустить на семерке), то тогда нужно получить инсталлятор с microsoft.com и установить на целевую машину. В-третьих, не забудьте с экзешником приложить все зависимости - если вы использовали какие-то библиотеки, то их сборки должны лежать вместе с exe. В общем все, остальное уже специфично для конкретного приложения. Для целей тестирования, если нужно свести риски незапуска к минимуму, могу посоветовать поднять чистую виртуалку с соотв. версией винды, и попытаться запустить там приложение в том виде, в котором вы его подготовили. Тогда станет понятно, что не учли и что нужно еще поставить.
    Ответ написан
    Комментировать
  • C#. DataAdapter нужно ли вызывать Dispose?

    Nipheris
    @Nipheris Куратор тега C#
    Толк от вызова метода Dispose есть всегда, когда есть сам метод Dispose (а если быть точным - если реализован интерфейс System.IDisposable). Тут просто не ваша ответственность разбираться - нужно ли вызывать Dispose или нет. Если автор класса реализовал этот интерфейс, значит для чего-то это ему нужно. Как правило это нужно, если используются управляемые вручную ресурсы (например, открытые файлы), либо в объекте создаются другие объекты, которые также IDisposable, и они должны подчищаться при disposing-е основного объекта, их создавшего.
    Если вы сталкивались с С++, то на мой взгляд Dispose - это и есть настоящий "деструктор" для объекта, который нужно вызывать самому (прямо или косвенно, с помощью using), чтобы корректно завершить жизненный цикл объекта. Так или иначе, вызывайте Dispose всегда, когда завершаете взаимодействие с объектом. Важно, что даже если СЕЙЧАС в реализации этого метода особо ничего не происходит, функционал может быть добавлен ПОЗДНЕЕ, в новой версии библиотеки которую вы используете. И тогда вам придется исправлять ваш код, чтобы избежать утечки ресурсов (незакрытые файлы или коннекции к БД часто гораздо бОльшая проблема, чем подтекающая память).
    Ответ написан
  • Как просто разбить грань фигуры на полигоны (триангуляция)?

    Nipheris
    @Nipheris Куратор тега C#
    Если используете OpenGL, рассмотрите алгоритмы, имеющиеся в библиотеке GLU - там есть достаточно качественный алгоритм тесселяции, поддерживающий сложные поверхности, в том числе с отверстиями. Т.е. вы передаете контуры поверхности: внешний и контуры дырок, алгоритм вам возвращает полигоны для отрисовки. Когда-то мне удалось применить его даже в паре с DirectX, т.к. времени на свою реализацию не было.
    Один из многих туториалов: www.glprogramming.com/red/chapter11.html
    Ответ написан
  • Какой фреймворк на c/c++ выбрать для реализации REST API?

    Nipheris
    @Nipheris Куратор тега C++
    EDIT: на сегодняшний день рекомендую Boost.Beast - одно из наиболее зрелых решений в плюсах.

    Старый ответ:
    Попробуйте C++ Network Library (на гитхабе) - проект достаточно молодой, но имеет очень интересный функционал и массу удобных абстракций, есть реализации URI, HTTP-клиента и сервера. Фактически это обертка над boost.asio, позволяющая не писать веб-сервер и клиент с нуля. Требует С++11.

    Кроме того, если есть требования по надежности/нагрузке, то лучше иметь дело с проверенным веб-сервером, и тогда стоит посмотреть в сторону FastCGI - тогда в инет будет смотреть какой-нибудь nginx или апач, а ваше приложение будет получать по FastCGI запросы от веб-сервера. Библиотеки для С++ имеются.
    Ответ написан
    Комментировать