• Почему не работает замена буфера?

    @mvv-rus
    Поясните, что именно не работает: что изначально собержится в буфере обмена, что вы одидаете в нем увидеть и что на самом деле в нем содержится после того, как программа отработала.
    Написано
  • Как записать названия папок в массив?

    @mvv-rus
    Host111, 4.7.2 - это .NET Framework, и там этого метода действительно нет: он - из .NET Core.
    Написано
  • Как добавить сервисы и использовать их в контроллерах?

    @mvv-rus
    убрали из проекта файл Startup.cs

    Вообще-то, сам по себе - как часть шаблона Generic Host - не убрали. Что поменяли - так это шаблоны веб приложений для версии ASP.NET 6 на новые, через WebAppliction. Но если желаете странного - можете использовать шаблоны для ASP.NET 5: там этот вариант есть, а потом, уже в проекте, можете поднять целевую версию ASP.NET.
    PS И не убрали (по крайней мере - в 6.0.1) даже известную мне ошибку ;-) , связанную с возможностью подключения методов ConfigureServices из нескольких Startup-классов через разные механизмы.
    Написано
  • Как хранить товары с различными опциями в БД?

    @mvv-rus
    Предложенное вами решение хорошо, если автору вопроса не требуется выбор по значениям атрибутов. Если требуется, то придется цеплять фактически полнотекстовый индекс (он, если чо, бывает и встроенным в/интегрированным с СУБД, например, у MS SQL) с поиском по нему, а ведение такого индекса и поиск по нему обходится дороже, чем по обычным для реляционной БД индексам по полям.

    Но выбор - за автором.

    PS
    Тем более что в последние годы появилось вполне достойное решение: во всех классических СУБД появилась поддержка JSON полей.

    Ну, а в предпоследние лет, эдак, 15-20 там появилась поддержка XML-полей - ровно для того же самого, просто тогда не было JSON а был XML. Это чисто к тому, что новое, нередко - это хорошо забытое старое.
    Написано
  • Как хранить товары с различными опциями в БД?

    @mvv-rus
    Ипатьев, видимо, автору этот поток информации помог, раз он отметил его ответом, вашего мнения не спросимши.
    Ну да, много букв - но и я не из Спарты родом, так что мне, надеюсь, это простительно. Однако, если вы эти буквы осилили, то должны были бы обратить внимание, что кроме совета общего характера ("используйте процедуру IDEF1/ER"), там и решение, мое личное, предложено, и варианты решений, упомянутых авторами рассмотрены, в том числе - нужные ключевые слова для поиска подходящего (IMHO) типа NoSQL БД (а этих типов, как известно, много разных).
    Написано
  • Как хранить товары с различными опциями в БД?

    @mvv-rus
    Можно и так, без категорий. Но тогда на интерфейсе (и при проверке ввода - тоже) невозможно будет указать список опций, актуальных именно для этого товара. В результате в базе неизбежно (ибо нет глупости, которую не мог бы совершить пользователь) появятся какие-нибудь "бежевые подписки".
    Я такой вариант использовать бы не стал.
    Написано
  • Как проверить в списке элементов типа string наличие двух одинаковых строк?

    @mvv-rus
    Василий Банников,
    Distinct также использует HashSet под капотом

    Верю: я не проверял, просто привык с давних времен работы с SQL что SELECT DISTINCT - это про сортировку, вот и написал ее сложность.
    Ну, тогда, все, что написано ниже про HashSet - и про плюсы, и про минусы - применимо и к .Distinct().Count().
    Написано
  • Как проверить в списке элементов типа string наличие двух одинаковых строк?

    @mvv-rus
    Вот скажи что за душный у тебя тех-лид? Это надож такое требование придумать!!

    На самом деле, это ограничение тут по делу. Потому что если иначе, то так вот и появляются в программе "квадраты": куски кода имеющие квадратичную сложность по длине данных. При наивной реализации проверки - через два вложенных цикла - именно "квадрат" и получится. Тогда как при варианте с .Distinct().Count() от Василий Банников сложность будет N*log(N). А при работе чез HashSet - вообще N. Но там могут быть нюансы: нужно правильно угадать размер хэш-таблицы, чтобы не нарваться на рехэширование при изменении ее размера, т.е. увеличении емкости, и памяти под эту хэш-таблицу должно хватать.
    Нет, конечно, если вы уверены, что этот код не станет узким местом в программе - можно и вложенные циклы лепить, только вот откуда взять ее, уверенность эту?
    Написано
  • Код ошибки 10016 на Windows Server 2016 MSSQL, как исправить?

    @mvv-rus
    Drawn, интересно-то как! Тo есть, не меняя AppID/CLSID его переименовали. И, возможно, сменили реализацию. Раньше реализация шла через DLL (параметр InprocServer32 в разделе с указанным CLSID), а сейчас, возможно - через указанную службу (ЕМНИП параметр LocalService). Если так, то, возможно, у вас сообщения из-за того, что эта служба остановлена (часто для COM-объектов, реализованных службами, разрешения на запуск весьма ограничены).
    Написано
  • Как в контроллеры привязывается CancellationToken?

    @mvv-rus
    Василий Банников, благодарю, понял: привязка идет к HttpContext.RequestAborted.
    Я, правда, по вопросу не понял, это ли нужно автору вопроса.
    Написано
  • Как в контроллеры привязывается CancellationToken?

    @mvv-rus
    Насчет возможности получения CancellationToken через параметр метода действия за счет привязки к модели меня терзают смутные сомнения. Его ведь нет м ьыит не может ни в запросе - ни в каком виде, хоть в виде параметра в строке URL, хоть в части пути (RouteValues), хоть в теле запроса по POST), - ни в контейнере сервисов (DI-контейнере). Разве что в default values маршрута его запихнуть - дык, а использовать его там как?
    А вот вариант использовать HttpContext.RequestAborted - одобряю и поддерживаю.
    Написано
  • Не пройдена проверка DFSREvent, как убрать ошибку?

    @mvv-rus
    К сожалению, пропадет сообщение о непройденной проверке, а вот ошибка может остаться: некоторые ошбки репликации SYSVOL фиксируются однократно при старте службы DFS Replication.
    Более надежный способ проверки репликации - вот такая команда (в окне командной строки в режиме администратора):
    For /f %i IN ('dsquery server -o rdn') do @echo %i && @wmic /node:"%i" /namespace:\\root\microsoftdfs path dfsrreplicatedfolderinfo WHERE replicatedfoldername='SYSVOL share' get replicationgroupname,replicatedfoldername,state

    Значения state:
    0 = Uninitialized
    1 = Initialized
    2 = Initial Sync
    3 = Auto Recovery
    4 = Normal
    5 = In Error
    Написано
  • Как при сборки мусора и перемещении объекта, сохраняется корректность ссылок?

    @mvv-rus
    mayton2019, ну, за 10 лет появился stackalloc. И даже, ЕМНИП был момент, когда Span ещё не завезли, что приходилось с размещенной через stackalloc памятью работать через указатели. Но для работы с объектами в куче через указатели, действительно, эти объекты надо фиксировать, а не надеяться на какое-то недокументированное поведение сборщика мусора (в конце концов, оно может поменяться без уведомления). Впрочем, и из этого правила есть исключение: можно указать и подготовить участок кода, на котором распредилитель памяти (и, следовательно, сборщик мусора) вызывать запрещено.
    Но главная причина предыдущего ответа вам - в том, что автор хотел узнать, как оно работает внутри, за пределами абстракции управляемой памяти, а вы ему сразу начали писать, что он об этом спрашивать не должен: типа, это не его дело.
    Написано
  • Как при сборки мусора и перемещении объекта, сохраняется корректность ссылок?

    @mvv-rus
    Упрощаете, и IMHO чрезмерно.
    Однако по жизни указатели, как сохраненные в памяти адреса объектов, таки есть. И даже в языке C# - есть, в unsafe context.
    Другое дело, что на уровне абстракции управляемого кода и управляемой памяти, на котором работает громадное большинство программистов на C#, всё это скрыто от глаз.
    Но как только возникает необходимость выйти за пределы этой абстракции (для использования системных вызовов или внешних библиотек с неуправляемым кодом), там требуются и указатели, и фиксированные или "пришпиленные" (pinned) объекты, на которые эти указатели указывают.
    PS Ну, а про управление памятью в .NET есть целая книга за авторством Конрада Кокосы (на русский язык переведена). В ней много букв, но все они - полезные.
    Написано
  • Microsoft Exchange 2016 перестал работать после миграции на другой хост. Как исправить?

    @mvv-rus
    James8888, код 2280 - событие ошибки общего характера: неудачная загрузка DLL. А конкретная ошибка - на вкладке Подробности, которую вы не привели (вообще, лучше копировать событие в текстовом виде - для этого есть кнопка, и вставлять в пост - там будет вся информация).
    Короче, корень проблемы, судя по всему - в этой DLL. Имя DLL выглядит для меня странно, в поиске в интернете она не ищется. Поскольку антивирус молчит, а вы - банк, то имеет смысл уточнить у безопасников, не из их ли хозяйства эта DLL. Загляните ещё в глобальную конфигурацию IIS - C:\WINDOWS\system32\inetsrv\config\applicationHost.xml - не прописан ли там этот файл.

    PS У вас поддержка от MS куплена? Если да, то это - кейс для них.
    Написано
  • Microsoft Exchange 2016 перестал работать после миграции на другой хост. Как исправить?

    @mvv-rus
    James8888, журналы (AKA логи) IIS - это обычные текстовые файлы, они пишутся в реальном времени, а каждое утров в 5 часов просто запись переключается на другой файл.
    По поводу ошибки из журнала событий - похоже, это то, что мешает IIS. В чем именно проблема - сказать трудно - нужно видеть код ошибки. Но местоположение dll - странное, в папке для временных файлов. И название странное - поиск по интернету его не находит. Проверьте сервер антивирусом. А если там есть антивирус и включена защита для диска - посмотрите, не нашел ли у вас там антивирус что-нибудь.
    PS Миграция, судя по всему, вполне поддерживаемая.
    Написано
  • Не пройдена проверка DFSREvent, как убрать ошибку?

    @mvv-rus
    Данное событие связано с наличием события ошибки (или предупреждения) в жрнале событий DFSR.
    В случае перезагрузки другого КД ожидаемое событие - сообщение о потери связи с ним в момент перезагрузки. Если событие у вас - такое (смотрите текст и код события), то все нормально. А для прохождения успешной проверки после него подождите сутки.
    PS Обращайтесь, пожалуйста, ко мне на "вы".
    Написано
  • Можно ли заменить private метод на делегат + лямбду?

    @mvv-rus
    Dyikot, я опять не вижу всей картины: где вы избегаете дублирования? Куда вы ещё эту лямбду передаете или намереваетесь передавать? И почему бы вам не передать вместо лямбды делегат для вашего private метода. Сделайте так
    Func<ContextMenu> NewColumnContextMenuDelegate = NewColumnContextMenu;

    и передавайте NewColumnContextMenuDelegate вместо лямбды, куда ее вам там нужно передавать. В этом случае производительность на однократном создании делегата вы вряд ли потряете. И имейте в виду, что лямбда, если она не статическая - это тоже не бесплатно: нужно к ней создавать объект замыкания.
    Даже можно, если вызов редкий, передавать просто NewColumnContextMenu - будут накладные затраты на создание объекта делегата каждый раз (в реальности, скорее - на сборку ненужных объектов делегатов как мусора, само создание обычно выполняется быстро), но, для редкого вызова они малы.
    А если лямбду предавать как аргумент больше никуда не нужно - не занимайтесь ерундой: создание делегата, не говоря уж о создании объекта замыкания для нестатической лямбды - это не бесплатно, просто вызов метода без всех этих допрасходов происходит быстрее (не говоря уж о том, что компилятор может вообще код этого метода вставить в код вызывающего метода ("заинлайнить").
    PS А вообще, производительность лучше все-таки мерять, если она важна.
    Написано
  • Можно ли заменить private метод на делегат + лямбду?

    @mvv-rus
    (если я вас правильно понял)Можно, наоборот, если вам нужно передать ссылку на код, эквивалентный этому private методу, то передаваемому делегату можно присвоить этот private метод. Наоборот = как вы предлагаете - тоже можно, конечно, но надо смотреть на накладные расходы: делегат - это объект, и если его создавать при каждом вызове, то они могут быть существенными.
    Конечно, это годится, только если передаваемая лямбда - это действительно делегат. Может быть иначе: в форме лямбды может передаваться ещё и Expression: это надо смотреть на парметры конкретной функции, в которую вы лямбду передаете. В таком случае делегат, содержащий обычный метод передавать, очевидно, нельзя. И переменную типа delegate AFAIK - тоже. Правда, в этом случае переменная, содержащая лямбду и передаваемая в параметр, должна иметь тип Expression, a делегату нужно присваивать скомпилированное из этой переменной выражение, но так дублирования избежать таки можно (правда, несколько громоздко, и добавляется немного накладных расходов на вызов делегата).
    PS Теперь вы понимаете, почему я писал про разные варианты? Если бы вы привели свой код - можно было бы понять, какой из них у вас.
    Написано