Pull to refresh
0
Send message

C Redis конечно интересный пример. Там ведь Singleton он все равно не вызовет Dispose до закрытия приложения. В целом псыл понятен, но вот пример совершенно не корректный

Для теста решил загрузить json который формируется при сборке проекта - CraftHub.deps.json.
Относительно небольшой json 28кб, всего 376 полей, но открывается очень долго. У меня он открывался 10 секунд. Решил глянуть в чем дело. А оказалось что оно для каждого добавленного при импорте json поля вызывает RebuildColumns. То есть для открытия этого json оно 378 раз создало и удалило все колонки в датагриде. Один раз при создании vm, 376 раз при OnPropertiesChanged, и еще один раз при OnColumnsChanged. Большой json такой программкой будет открываться, вероятно, очень долго.
А все потому что в ImportFromPathAsync

foreach (var field in mappedFields)
    Properties.Add(new JsonPropertyDefinition { Name = field.FieldName, FieldType = field.SelectedType });

На середине статьи прям таки чесались руки написать про Channels. Но Microsoft меня опередили. И все равно удивительно, что даже с ними такие большие аллокации. А разница по времени между финальными реализациями ощущается как погрешность

Мне кажется проблема может быть в том что пробелов на самом деле много, на википедии приведены аж 18, и это может привести к проблемам при копировании и вводе - выглядят одинаково, а символы разные. Во вторых - различимость. Строка "ААА" читается вполне очевидно, хоть при копировании, хоть при вводе с бумажки. А вот " " уже не так однозначно, а если внутри еще и разные пробелы, то вообще мрак. Пробелы(или другие нечитаемые символы типа \t) в начале или в конце могут означать ошибку при копировании или же пользователь и правда хотел вставить этот символ? Вобщем слишком слишком много краевых ситуаций при которых получается "я ввел пароль правильно, а он мне пишет что пароль введен не правильно"

Как то немного подзавис с ваших "В 2 строки лучше так". Кому лучше? Мало того что читается хуже так еще и работает не правильно. С тем же успехом можно было записать в одну строку

Console.WriteLine("odd");

Работает точно так же, в случае положительных чисел

Да нет, как раз это и указано
Да нет, как раз это и указано

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

var filenameDb = Path.Combine(FileSystem.AppDataDirectory, "app.db3");

if (!File.Exists(filenameDb))
{
    lock (_lockDb)
    {
        if (!File.Exists(filenameDb))
        {
            using var stream = FileSystem.OpenAppPackageFileAsync("ML/app.db3").GetAwaiter().GetResult();
            using (var memoryStream = new MemoryStream())
            {
                stream.CopyTo(memoryStream);
                File.WriteAllBytes(filenameDb, memoryStream.ToArray());
            }
        }        
    }
}

return new LocalDatabase(filenameDb);

Information

Rating
5,324-th
Registered
Activity

Specialization

Фулстек разработчик
Средний
SQL
C#
Visual Studio
Microsoft SQL Server
ASP.NET WEB API
Entity framework
.NET Core
ASP.NET
Linq
WPF