Ответы пользователя по тегу .NET
  • Практики регулирования доступа к кэшированным (редко изменяемым) данным в условиях многопоточности?

    @kttotto
    пофиг на чем писать
    Если данные в кеше недействительны, то кэш сбрасывается и перечитывается по новой. Чтобы весь глобально не сбрасывать, его делят на слои и сбрасывают необходимый слой. Чтобы отдельно объект в кэше обновлять, такого не встречал.

    Если слои кэша в Concurrent списках, то без разницы, кто его в этот момент читает. Мы для кэша используем Lazy.

    Я так понимаю, что данные хоть и будут изменяться, то не часто, иначе нет смысла в кэше. В нашем случае, когда приходят новые данные или мы их обновляем, мы руками вызываем _cache.Layer.Reset()
    Ответ написан
    1 комментарий
  • Automapper - Можно ли проигнорировать маппинг какого-либо свойства уже после создания карты маппинга?

    @kttotto
    пофиг на чем писать
    Я, думаю, что только создать две разные конфигурации.
    Ответ написан
    Комментировать
  • Насколько готов к продакшену asp.net core?

    @kttotto
    пофиг на чем писать
    Что такое "реальные задачи"?
    В нашей конторе уже два немаленьких проекта сдали реализованные на asp core. Но работают они правда на .net 4.61, стабильно и уверенно. Я пока еще не сталкивался с проблемами в нем, чтобы сказать, что сырой. Как по мне, то он дает гораздо больше возможностей в работе, чем mvc5.
    Ответ написан
    Комментировать
  • Не удалось найти Nuget пакет. Пакет с таким идентификатором отсутствует в след источниках?

    @kttotto
    пофиг на чем писать
    Попробуйте обновить Nuget manager. Очень часто такая ошибка бывает из-за этого.
    Ответ написан
    Комментировать
  • Какой ioc-контейнер является стандартом в .net?

    @kttotto
    пофиг на чем писать
    Никакой. На вкус и цвет, как говорится.
    Ответ написан
    Комментировать
  • Почему в var a = new int[1] {5} нет упаковки?

    @kttotto
    пофиг на чем писать
    Я, думаю, Вы что-то не так поняли. Массив, это ссылочный тип и в случае
    var a = new int[1] {5}
    значение переменной a будет лежать в стеке, но значением будет ссылка на место в куче, указывающая на массив интов. Тоже самое касается и
    a = new object[1] {5}

    Упаковка будет происходить со значениями, которые лежат в стеке, а потом копируются в кучу. Например так
    int a = 5;
    var b = (object)a;

    В первой строке мы положили в стек пятерку, а во второй эту пятерку мы помещаем в кучу. Переменная b будет лежать в стеке, значение которой будет указывать на адрес в куче, где лежит тип object, со значением value равным 5. И то, что у объекта поле будет интовое, не означает, что оно будет в стеке.
    Ответ написан
    7 комментариев
  • Как посмотреть исходный код .NET в Visual studio?

    @kttotto
    пофиг на чем писать
    Options/Debugging/General поставить галочку в "enable .net framework source stepping". Сразу начнется закачка PDB файла с исходниками. Учтите только что весят они не мало, и нужно будет достаточно места на жестком.

    PS: Если Вы хотите дебажить .net, то нужно сделать Эти настройки.
    Если же Вы хотите просто навигацию по исходнику, тот тут сложнее. Для нормальной навигации нужны ссылки в метаданных на исходники. Это сделали только для core2, но со временем обещают добавить для всех версий. Лично я пользуюсь в решарпере настройкой "navigation to source/decompile methodes", но как вариант есть расширение для vs Ref12, в этом случае, при got to defition в браузере открывается страница на https://referencesource.microsoft.com с исходником.
    Подробнее здесь
    Ответ написан
    Комментировать
  • Как лучше сделать авторизацию в ASP.NET Core 2.0?

    @kttotto
    пофиг на чем писать
    Я рекомендую Identity брать за основу. Там учтены многие моменты безопасности, которые Вы навряд ли учтете, если будете сами руками все писать.
    Ответ написан
    Комментировать
  • Почему такой код работает?

    @kttotto
    пофиг на чем писать
    1. Поставьте брекпоинт в контроллере и посмотрите this.Request.Query, там будут все параметры, что пришли в контроллер, так же они могут быть в Body. Именно для этого и нужны атрибуты FromBody и FromRequest, чтобы точнее указать от куда мапить значения на модель. После того как он спарсит и смапить значения в модель, если есть проверка, он возьмет атрибуты и по ним уже проверит на валидность.

    2. Вы правильно понимаете. Все это реализовано в identity.
    Ответ написан
    Комментировать
  • Как правильно дождаться выполнения всех потоков, созданных в цикле?

    @kttotto
    пофиг на чем писать
    У Вас не правильный подход. Во первых забудьте про Thread и используйте TPL. Во вторых для распараллеливания запросов в цикле есть замечательный метод Parallel.ForEach. В третьих для ожидания выполнения всех параллельных задач есть Task.WaitAll.
    В общем Вы можете создать список Task-ов и запихнуть их в Task.WaitAll, но лучше пройдитесь параллельным форичем по Вашему периоду и внутри запускайте Ваши методы. Код за форичем будет ожидать завершения всех потоков в цикле.
    Ответ написан
    2 комментария
  • В каких случаях используют С# и Java в веб-разработке?

    @kttotto
    пофиг на чем писать
    Без разницы на чем писать. На любом из перечисленных можно написать хорошее качественное решение. Стек для веба выбирают в основном из того с чем умеешь работать.
    Ответ написан
    Комментировать
  • В чем заключается сакральный смысл .Net Core?

    @kttotto
    пофиг на чем писать
    Любую задачу можно эффективно решить и под core и под java. Но как по мне, то на C# мне надо меньше телодвижений делать и есть моменты, которые работают эффективнее, чем в java (все-таки C# помоложе и учитывал ошибки конкурентов). Плюс java более инертная, .net развивается быстрее, быстрее реагирует на потребности и если говорить об enterprise, то я считаю, что у .net перспектив больше.
    Ответ написан
    3 комментария
  • Как реализовать фильтрацию записей на основе SQL подобного текста?

    @kttotto
    пофиг на чем писать
    Надо писать свою грамматику и анализатор под него, который будет генерировать нормальный sql запрос. Мы применяли antlr4cs
    Ответ написан
    Комментировать
  • Как я могу превратить код в изображение?

    @kttotto
    пофиг на чем писать
    На base64 это не похоже, значит обычный набор байтов. Значит строку надо конвертнуть в массив байтов. Ну потом это в поток и либо сохранить в файл, либо отдать дальше куда надо. Примерно как то так
    byte[] imageBytes = Encoding.ASCII.GetString(strData);
    using(var str = Image.FromStream(new MemoryStream(imageBytes)))
    {
        str.Save("image.png", ImageFormat.Png);
    }
    Ответ написан
    8 комментариев
  • ThreadPool vs Thread - многопоточный TCP сервер?

    @kttotto
    пофиг на чем писать
    Используя в чистом виде thread Вам придется руками контролить множество нюансов, когда в TPL это все сделается за Вас. Рекомендуется использовать TPL.
    Ответ написан
    Комментировать
  • C# Replace по порядку?

    @kttotto
    пофиг на чем писать
    Дарю! И вообще учи мат часть, за счет халявы на тостере долго не протянешь.
    static void Main(string[] args)
    {
    	var str = "{1|2|4}{1|3|3}{2|2|3}{1|1|3}";
    	var number = new [] { "3", "2", "1", "2" };
    
    	var temp = str
    		.Trim('{', '}')
    		.Split(new []{ "}{" }, StringSplitOptions.None)
    		.Select(x => x.Split('|').ToArray())
    		.ToArray();
    
    	var result = new StringBuilder();
    	for (var i = 0; i < temp.Length; i++)
    	{
    		var isParse = int.TryParse(number[i], out int index);
    		if (isParse)
    		{
    			result.Append(temp[i][index - 1]);
    		}
    	}
    
    	Console.WriteLine(result);
    	Console.ReadKey();
    }
    Ответ написан
    8 комментариев
  • Как правильно настроить smtp для email рассылок?

    @kttotto
    пофиг на чем писать
    Если конкретно по Вашему коду, то
    1. Если Вы так жестко прописываете все настройки в коде, то сделайте список настроек. Сначала сам класс
    class SmtpSetting
    {
    	public string Host {get; set;}
    	public string Server {get; set;}
    	public string Port {get; set;}
    }

    Потом сам список
    var smptSettings = new List<SmptSetting>
    {
    	new SmptSetting
    	{
    		Host = "mail.ru",
    		Server = "smtp.mail.ru",
    		Port = 587
    	},
    	new SmptSetting
    	{
    		Host = "yahoo.co",
    		Server = "smtp.yahoo.co",
    		Port = 465
    	},
    	...
    }

    И тогда Вам не придется использовать switch
    var currentSmtp = smptSettings.FirstOrDefault(x => x.Host == host);
    if(currentSmtp != null)
    {
    	var smtp = new SmtpClient(currentSmtp.Server, currentSmtp.Port);
    }

    Вы сказали, что у Вас есть бд, где храните аккаунты. Храните там же и настройки smtp, в том же виде (Id,Host,Server,Port), тогда из бд Вы будете получать весь список серверов и при изменении списка настроек smtp, не придется лезть в код и пересобирать проект.

    2. И для того, чтобы Вы могли вставлять html разметку в письмо, у MailMessage есть настройка IsBodyHtml, установите ее в true.
    Ответ написан
    1 комментарий
  • Как проверить массив на наличие совпадений?

    @kttotto
    пофиг на чем писать
    Накидал пример, получите все айдишники повторных комментариев, которые надо удалить.
    static void Main(string[] args)
    {
        var comments = new[]
        {
             new Comment { Id = 1, Text = "1" },
             new Comment { Id = 2, Text = "2" },
             new Comment { Id = 3, Text = "3" },
             new Comment { Id = 4, Text = "1" },
             new Comment { Id = 5, Text = "2" },
             new Comment { Id = 6, Text = "2" },
             new Comment { Id = 7, Text = "1" },
             new Comment { Id = 8, Text = "4" },
             new Comment { Id = 9, Text = "5" },
             new Comment { Id = 10, Text = "2" },
        };
    
        var result = comments
    				.GroupBy(x => x.Text)
    				.SelectMany(x => x.Select(y => y.Id).Skip(1))
    				.ToArray();
    
        foreach (var id in result)
        {
             Console.WriteLine($"{id}");
        }
        Console.ReadKey();
    }
    
    class Comment
    {
         public int Id { get; set; }
         public string Text { get; set; }
    }
    Ответ написан
    Комментировать
  • Методы-индексаторы в чем суть если можно использовать расширенные колекции?

    @kttotto
    пофиг на чем писать
    В Вашем примере логика индексатора проста, поэтому смысл не виден.

    Приведу пример из жизни. Мне надо было хранить и отображать данные в виде, где в первой строке одно значение, во второй строке два значения, в третьей - три и т.д. Отображались в ui они в виде пирамиды. Первая мысль, это квадратный двумерный массив по размеру самой большой последней строки и пустое пространство вершины забить нолями. Отобразить такой массив пирамидой легко. Но тогда у меня возникала трудность в работе с этим массивом, т.к. чтобы забрать нужные значения, нужно правильно отсекать пустые значения, да и как-то не комильфо кучу не нужных значений хранить. Следом приходит мысль сделать массив массивов с разной длинной, но чтоб сделать итерацию по такому массиву, а потом отобразить, нужно тоже лишние телодвижения делать. И тогда я сделал обычный список, где данные хранились в порядке как 1, 21, 22, 31, 32, 33 и т.д., но приделал ему индексатор [ , ], где я указывал строку и положение в строке, а логика этого индексатора уже высчитывала реальное значение элемента: ноль (т.е. пустое пространство у верхушки пирамиды) или значение из списка.
    Во первых я решил проблему лишних значений, во вторых, по данным я мог пройтись одним форичем, а не вложенными форами, без проверок лишних значений и в третьих - отображалось также легко как и двумерный массив.
    Ответ написан
    Комментировать
  • Как создать документ Word с таким форматированием на C#?

    @kttotto
    пофиг на чем писать
    Работа из кода с документами office легко гуглится. Например Интерфейс Document.
    Так же в интернете полно примеров по форматированию док файлов How to: Programmatically Format Text in Documents.
    Готовый код никто здесь не даст, это достаточно объемно скрупулезно.
    Ответ написан
    Комментировать