Ответы пользователя по тегу C#
  • Разумен ли self-hosting ASP.NET Web API приложения в службе Windows? Кто-нибудь использовал такое в проде?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Есть мысли перейти на селфхостинг, однако есть опасения, что мировой опыт отвергает такой подход


    мопед не мой
    но:

    Сначала мы пошли по простому пути: прикрутили IIS, создали ASP.NET-приложение с фреймворком ASP.NET Web API и начали пилить бизнес-логику. Быстро стало понятно, что вся эта конструкция не держит больше 500-700 запросов в секунду. Как бы мы ни заклинали IIS, ни подкручивали 100500 параметров, проблема не решалась. И совсем доставало, что залезть внутрь IIS нет возможности, а значит полного контроля над ситуацией нам не добиться. IIS — пресловутый черный ящик, в котором тяжело что-то кардинально изменить.

    Тогда мы попробовали сервер проекта Katana (реализация OWIN-инфраструктуры от Microsoft). Katana — проект с открытым исходным кодом, поэтому можно было увидеть внутренности. К тому же, у Web API есть поддержка OWIN, а значит, сильно менять код не придется. Katana предоставляет возможность работать как с IIS, так и с их простым сервером, написанным на основе .NET-овского HttpListener. Именно его мы и взяли. Результат порадовал: теперь сервер держал около 2000 запросов в секунду, а ASP.NET приложение трансформировалось в Windows-сервис.

    Однако нагрузка на сервера увеличивалась, пилились новые фичи. Становилось понятно, что и этот вариант нас тоже не устраивает. Тогда мы пошли на кардинальные меры: от всей Катаны остался только HttpListener с небольшой обвязкой для асинхронности, от Web API не осталось ничего, то есть приложение стало полностью заточено под HTTP-запросы для биддера. В результате сервер стал способен обрабатывать до 9000 запросов в секунду. Вывод прост: вся OWIN- и Web API-обвязка оказывает критическое влияние на высокопроизводительные приложения. Хотите быстрее — пишите проще и неуниверсально. (Это не говорит о том, что внутри приложения должен быть ядерный говнокод. У нас всё модульно, вполне расширяемо: DI, паттерны и всё такое)


    источник - https://habr.com/company/targetix/blog/261745/
    Ответ написан
    1 комментарий
  • Когда используете принудительную сборку мусора?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    это из серии - не заморачивайтесь, пока реально не упретесь в проблемы, с паузами на сборку мусора

    тогда сама проблема и будет ответом на ваш вопрос

    это НЕ типовые ситуации применения, по тому и не возможны типовые рекомендации. если простые пояснения не понятны - значит просто надо "дорасти" до них собственным опытом различных применений

    (!) не следует путать с обязательным освобождением системных ресурсов - это обычно всегда отмечается в примерах MSDN - некий системный ресурс (типа кисть при рисовании в формах) должен быть обязательно освобожден. это не связано со сборщиком мусора, а связано с тем, что сборщик мусора не управляет системными объектами вообще
    Ответ написан
    2 комментария
  • Как создать браузер на C# или C++?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    смотрите и подглядывайте на том же джите 1,048 repository results
    Ответ написан
    Комментировать
  • Как правильно получать логи из внешней DLL?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    правильнее так, как вам удобно, куда пишете логи?:
    - текстовые файлы?
    - журналы событий винды?
    - .. или это серверное приложение, есть система сбора логов?..(хотя тогда вряд ли был бы такой вопрос)

    простейший вариант - текстовый файл обычно. тогда достаточно соглашения о формате логов (структура сообщения) и указания папки, куда складывать

    плагины могут вести собственные логи - ни чего плохого в этом нет. сразу понятно кто упал. и это просто (а простота вообще важное качество в программировании)

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

    удачи
    Ответ написан
    Комментировать
  • Преимущества C# в GameDev?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    C# (в Unity это Mono диалект) - классно тогда, и только тогда, когда вы владеете C# (особенно если вас от него прет.. как меня)

    если вас больше прет от C++.. забейте и забудьте... копайте в сторону unreal engine и будет вам все... (ну или почти все..
    Ответ написан
    Комментировать
  • System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - для проверки памяти используйте соответствующие тесты 1 и 2

    2 - в общем случае, это говорит о том что у вас нарушения адресаций - какой то из подпроцессов залезает в память, которая ему не позволена

    ps меня смущает эта строка
    ZeroMemory(&si, sizeof(si));
    Ответ написан
    Комментировать
  • Где найти код, наглядно показывающий полезность сборки мусора с C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - такого кода нет (см п3)

    2 - в книгах/сети не особенно то и грешат, скорее вам пока не понятны пояснения что и когда стоит делать

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

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

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

    ps
    Например:
    Кусок кода 1. Мусор не собираем. Время выполнения 3 минуты.
    Кусок кода 2 (переписанный кусок кода 1). Собираем мусор. Время выполнения стало 10 секунд.
    если у вас комп с 4/8/16 Гб ОЗУ, а задача расходует 10-100.. 200-300 Мб - сборщик мусора вообще не будет вмешиваться (если конечно память не забита и так под завязку).. и за какие то 10 микросекунд очистит мусор, пока вы смотрите на слово типа Finished и осознаете его значение .. как то так
    Ответ написан
    Комментировать
  • Как программно включать/отключать нужный USB порт на C#?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    вообще то вопрос буквально гуглится..
    Ответ написан
    4 комментария
  • Как преобразовать ZIP в бинарный код на C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а что в зипе? ... а то не факт что все тут друг друга понимают

    для начала отделите задачу упаковки/распаковки от содержимого зипа, а для этого есть классы (если это надо шарпить):

    ZipFile Class https://msdn.microsoft.com/en-us/library/system.io...
    ZipArchive Class https://msdn.microsoft.com/en-us/library/system.io...
    ZipPackage Class https://msdn.microsoft.com/en-us/library/system.io...

    а если контент имеет отношение к исполняемому коду или сорцам - это лучше сделать отдельной темой

    ps или все таки уточняйте задачу
    Ответ написан
    1 комментарий
  • Есть ли большой туториал для изучения С# desktop + DB?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    несколько полезных ссылок
    - https://www.techdays.ru/
    - https://mva.microsoft.com/
    - https://www.codewars.com/

    ps чуть не забыл - https://msdn.microsoft.com/ru-ru/
    Ответ написан
    Комментировать
  • Где можно повысить навыки програмирования на языке c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Комментировать
  • Индекс за пределами диапазона?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вообще то видно, что Image_Name_List.Count = 1 при этом не видно i, если i больше 0 (да да, по традиции сишных языков, все индексируется с 0) то именно такая ошибка и возникнет

    что такое Capacity см тут Свойство List.Capacity (совсем коротко - это сколько зарезервировано ссылок на данный момент, но не сколько есть)

    ps если все еще не понятно - актуальный размер это Свойство List.Count
    Ответ написан
    4 комментария
  • Почему нету отчетов в visual studio 2015?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а вы уверены что это не сторонняя библиотека компонентов?

    я вообще не припомню в формах такого стандартного компонента

    и если библиотечный - нужно просто уточнить что за библиотека, и подключить ее в проект студии 2015, другой вопрос - может потребоваться более свежая версия библиотеки, и бывают случаи когда разработчики не развивают библиотеки, то есть может оказаться, что совместимой версии не существует. но для начала надо просто выяснить - из какой библиотеки компонент?

    ps компонент "отчет" может казаться стандартным, если у вас вдруг у вас lightswitch проект, кажется там такое было, но это не формы, там все на silverlight основано. но и в этом случае не все просто - в 2015 это опциональный компонент студии редакции проф, в 2015 коммунити его можно поднять, доустановив OfficeDeveloperTools, но 99% что будут конфликты с Azure Tools, а выражается в том что проект невозможно опубликовать - и как разруливать, надо будет гуглить .. кстати, конвертация lightswitch проектов из 2012 в 2015 есть, но она косячит - проект может не собраться, а если даже соберется - попытки его развивать все равно вызывают косяки (это к тому что lightswitch проект в 2015 лучше пересоздавать с 0)

    .. для примера - в 2017 lightswitch вообще не существует, МС закрыл этот проект и не рекомендует его использовать

    но если точно формы - выясняйте что за библиотека
    Ответ написан
    2 комментария
  • Какие IDE есть для C# и какой из них лучше?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    если вы под виндой - Visual Studio 2017 Community абсолютно бесплатна, и ни кто с ней рядом не сравняется на сегодняшний день

    под линуксом, скорее всего JetBrains Rider будет самым продвинутыми, но он платный и под линукс и под винду

    есть кроссплатформенный SharpDevelop, но на мой взгляд это уже мазохизм

    есть кросплатформенная Visual Studio Code, но она еще слабее, главная ее фишка в легкости написания плагинов поддержки огромного количества языков, которые путных IDE вообще не имеют

    все зависит от цели. если цель C# в Windows - только Visual Studio 2017 (если хотите бесплатно, то повторюсь - Community редакция)
    Ответ написан
    1 комментарий
  • C# listview реагирует неправильно на нажатие?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    код по "кнопке 3" в студию!... а то разговор ни о чем

    ps и слово
    форма
    точно можно считать подсказкой что вы используете WinForms, а не WPF, или UWP .. а то везде свои нюансы будут

    pps а то вдруг еще Xamarin ;)) - это тем более отдельный курятник, тем более надо явно указывать ))

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вариант 2, но:

    - в формах и wpf - встроенный движек это IE, и достоверно есть сайты которые уже на него кладут в плане поддержки - недавно тут пролетал вопрос по встроенному браузеру в C# и сайт... (bmw в РФ что ли?) в общем 100% сайт работал в хроме, фоксе, эйдже, но не в IE!

    - в UWP встроеный webview это уже Ейдж, со всеми вытекающими приятностями

    что в итоге? если вам нужно классическое десктопное приложение под винду на C#, с встроенным современным браузером, и UWP не подходит (хотите захватить вин 7 тоже) - ваш выбор это или CEF# или GeckoFx (встраиваемый фокс, но либа обновляется гораздо реже, увы)

    ps ах да.. чет успел забыть - говорите свой сайт делаете? тогда вам просто придется точить его под совместимость с IE тоже, ну тогда и руки совсем развязаны.. на клиенте.. на сайте возможно как раз наоборот - будет замороченнее

    pps а студию лучше поднять до 2017, если нет каких то особых ограничений

    ppps если сделаете ставку на встроенные IE - напишите, там есть еще коварная тема - по дефолту встариваемый IE на 2 версии ниже чем просто IE запущенный ручками - заморочки "кровавовго энтерпрайза".. пороюсь в закромах и кину ветку реестра где это можно корректировать.. по существу, для каждого экзешника со встроенным IE, не зависимо от технологии (это всегда по факту ActiveX компонент) что бы поднять его до последней версии, надо делать запись в реестре.. вот такая фигня...
    Ответ написан
    7 комментариев
  • Как в Word документе найти и изменить свойство таблицы?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    совет - включите запись макросов, проделайте манипуляции с таблицей, те самые что хотите автоматизировать, завершите запись, откройте VBA и переведите с VB на шарп, то что будет в записи

    довольно универсальный рецепт, при работе с офисом

    ps правда перевод не всегда абсолютно очевиден.. но можно достаточно быстро освоится
    Ответ написан
    Комментировать
  • Как отслеживать изменения файлов, и откатывать изменения если надо с#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - FileSystemWatcher эт само собой..

    2 - но тут надо уловить что ватчер сообщит о том что файл изменен... что была возможность к чему то то там откатить - надо что бы до изменения уже существовала резервная копия... дальше - творите, выдумывайте, пробуйте
    Ответ написан
    3 комментария
  • Docker: как запустить консольное Desktop приложение (exe)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    я бы еще дополнил - любое .Net Framework приложение, просто бессмысленно "докеризировать" - работать будет только в среде полноценной винды

    ps а докеризировать винду в линукс - это очевидное извращение... ну.. кому что и как...

    pps .Net Framework объемен, и тесно интегрирован с системой (только винда) а приложения под него компактны, даже очень, докеризм здесь абсолютно не нужен .. просто соотношение компактности и переносимости для .Net Framework со средой исполнения, изначально несоизмеримо лучше чем у всего докеризма
    Ответ написан
    3 комментария
  • Какой паттерн лучше использовать при необходимости реализации методов из разных классов?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    есть отличный инструмент - расширения .. творите любую вакханалию...

    ps кстати, расширения отучают от привычки плодить лишние классы из за 1-2-3 методов.. ;))
    Ответ написан
    Комментировать