• Возможна ли гонка данных при отправке их на сокет?

    @maxcad Автор вопроса
    Wataru, скажите а от SOCK_STREAM какие проблемы можно ожидать?
    Вроде там либо получил либо не получил, третьего не дано.

    Я GPT поспрашивал, он мне все рекомендует на клиенте выстроить в очередь данные и отправлять по одной штуке получая добро от сервера. Либо бредить начинает.

    Отправителями будут разные процессы. Грубо говоря по http протоколу будет прилетать запросы REST API, попробуй собери их в очередь. Вот я и прикинул, что сокеты умеют собирать входные данные которые приходят в асинхронном беспорядке. Но не хотелось бы чтобы эти данные конфликтовали.
    Написано
  • Возможна ли гонка данных при отправке их на сокет?

    @maxcad Автор вопроса
    попробовал дейтаграммы увеличить до 2 Мб. Ошибка -1. Она вообще не уходит.
    У файлового сокета она по умолчанию мегабайт получается.

    Я так понял если не переполнять буфер сокета, то и гонки данных не будет?
    Сокет сам выстроит дейтаграммы в очередь в своем буфере?
    Написано
  • Как изменить тип окна FolderBrowserDialog?

    @maxcad Автор вопроса
    MrWatson123123123,
    У меня FolderBrowserDialog открывает именно второй вариант. И там предлагает выбрать папку, а не файл. Он похож на выбор файла, но это окно выбора папки такое.

    Сейчас проверил.
    .net Framework 4.7.2 открывает первый вариант
    .net 6 второй.
  • Доступ к GeoLite будет закрыт из за санкций?

    @maxcad Автор вопроса
    LevZ, написал рядом что я сделал.
  • Доступ к GeoLite будет закрыт из за санкций?

    @maxcad Автор вопроса
    Drno, там ничего не сказано о том откуда берется база. Судя по всему это утилита из прошлого, когда GeoLite2 была доступна без ограничений. И было очень много утилит которые качали ее напрямую у MaxMind без регистрации.

    Сейчас всем этим утилитам надо скармливать базу, которая качается с помощью API ключа. А эту лавочку MaxMind прикрыл для России. По крайней мере для меня. На хабре еще нет статей на эту тему. Значит не все россияне получили эти письма.
  • Виснет программа при зписи на диск много мелких файлов?

    @maxcad Автор вопроса
    Василий Банников,
    В этом случае цикл вызовет разом все 100500 методов и они тебе все разом будут выкидывать 100500 сообщений о своем прогрессе записи.

    Файлы надо записывать последовательно пока кто-нибудь не придумает диски с возможностью записи в много потоков.

    Я примерно понял на что вы мне пытаетесь указать. Сделать асинхронность чтобы не висло окно программы.
    Это у меня изначально было сделано. Я цикл целиком сделал в отдельном потоке с выводом прогресса записи. Потому и определил что этот поток виснет, так как вывод прогресса останавливается. А дальше падает вся система
  • Виснет программа при зписи на диск много мелких файлов?

    @maxcad Автор вопроса
    Василий Банников, при асинхронности в цикле каждая новая итерация будет начинаться не ожидая когда закончится предыдущая. По итогу цикл закончится за долю секунды, а запись файлов будет продолжаться без какого либо контроля со стороны программы.

    Я тут уже где-то рядом написал, что проблема оказалась в VeraCrypt это она виснет. Но асинхронная запись множества мелких файлов мне кажется не очень хорошим решением даже на стабильно работающем диске.
  • Виснет программа при зписи на диск много мелких файлов?

    @maxcad Автор вопроса
    Насчет параллельности не знаю. Жесткий диск это как бутылочное горло. Много там не распарллелить. Все параллельные потоки в очередь выстроятся и получится то же самое.

    Еще заметил, что если программу вырубить через диспетчер задач, то через пару минут доступ к диску нормализуется. Видимо сам диск по каким-то причинам падает.
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Илья, я понял как работает IEqualityComparer и уже вроде нашел где и почему у меня он теряется. В одном из базовых классов он переопределяется в другую переменную, коротко говоря.

    Вобщем я понял как оно всё работает и можно коменты с IEqualityComparer пометить как решение. Я такой кнопки там не вижу.
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Илья,
    А не подскажете у IEqualityComparer нет никаких ограничений на работу в разных потоках или разных классах?

    В Program.cs когда весь код в одном файле всё работает. А когда я словарь передаю в аргументах конструктора в другой класс, а тот через аргументы лямбда выражения перекидывает его в другой поток, а там обработчик выдергивает его из базового класса. IEqualityComparer перестает работать.

    А вариант с преобразованием байтов в строку без проблем проходит из класса в класс, из потока в поток, через все наследования итп.
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Илья, но основная проблема у меня не в том, чтобы найти или проверить существование ключа, а получить значение по ключу.

    byte[] bufer1 = new byte[5] { (byte)4, (byte)0, (byte)91, (byte)204, (byte)2 };
    byte[] bufer2 = new byte[5] { (byte)4, (byte)0, (byte)91, (byte)204, (byte)2 };
    
    Dictionary<byte[], string> Dict = new Dictionary<byte[], string>();
    
    Dict.Add(bufer2, "bla bla bla");
    
    Console.WriteLine(Dict[bufer1]); // нет такого ключа потому-что ключом была переменная bufer2


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

    IEqualityComparer кажется не решает эту задачу. Или решает?
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Илья, у меня есть бинарный файл с данными похожими на сериализацию.
    Сруктура у него примерно такая
    (8 нуллбайт) (3байта-ключ)(8 нуллбайт)(строка-значение)(8 нуллбайт) (3байта-ключ)(8 нуллбайт)(строка-значение) итд.

    В HEX редакторе это выглядит примерно так
    ........aabbcc........bla bla bla........ddeeff........tra la la.......итд

    Мне надо этот файл собрать в переменную к которой я впоследствии смогу обращаясь по ключу получать строку.
    Соответственно было бы выгоднее ключ оставлять в байтах.
    Но к сожалению словарю нельзя подсунуть данные не являющиеся ссылкой на ключ.

    Я так понял тип byte[] ведет себя так везде, не только в словарях, а вообще везде.

    Странно. почему строковые переменные ведут себя по другому?

    byte[] b1 = {1, 2, 3, 4};
    byte[] b2 = {1, 2, 3, 4};

    b1 == b2 false

    string s1 = "aaa";
    string s2 = "aaa";

    s1 == s2 true

    В этом примере у строк как и у байтов разные адреса. По сути s1 и s2 это ссылки на разные объекты. Но почему-то они равны. А байты почему разные?
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Илья,
    Вот рабочее решение.
    byte[] bufer1 = new byte[3] { (byte)4, (byte)0, (byte)91 };
    byte[] bufer2 = new byte[3] { (byte)4, (byte)0, (byte)91 };
    Dictionary<string, string> Dict = new Dictionary<string, string>();
    string str1 = bufer1[0].ToString("X2") + bufer1[1].ToString("X2") + bufer1[2].ToString("X2");
    string str2 = bufer2[0].ToString("X2") + bufer2[1].ToString("X2") + bufer2[1].ToString("X2");
    Dict.Add(str1, "blablabla");
    bool test = Dict.ContainsKey(str2);
                if (test)
                {
                    Console.WriteLine(Dict[str2]);
                }
                else
                {
                    Console.WriteLine("Не найдено");
                }
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Griboks, насколько я знаю, значение переменной это те данные которые она возвращает. А обе они возвращают одинаковые данные. Значит у них одинаковые значения.
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Griboks, в этом его и проблема.
    Если
    bufer1 bufer2 имеют одинаковые значения
    Dict.[bufer1] все равно не равен Dict.[bufer2] потому-что у bufer1 bufer2 разные адреса.
    А это значит для выборки значений придется перебирать его в цикле, что в разы увеличивает время работы. А так же утрачивается его ассоциативность.

    А мне хотелось что словарь будет как ассоциативный массив в php. В который можно напихать ключи и значения любых типов. А оно вот как вышло.
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    @maxcad Автор вопроса
    Griboks, байтовые ключи с одинаковым содержимым смотрят в разные области памяти, стеки, кучи итп. Поэтому словарем воспринимаются как разные, хоть и значения у них одинаковые.
  • Как узнать, что флаг включен в сумме флагов?

    @maxcad Автор вопроса
    Василий Банников, спасибо. А то я уже собрался дискретную математику с ассемблером подучить.
  • Как узнать, что флаг включен в сумме флагов?

    @maxcad Автор вопроса
    А как число сделать флагом?
    Я нагуглил
    [Flags]public enum Flgs
    {
        f1 = 1024
    }

    Но при запуске пишет такое:
    System.ArgumentException: "The argument type, 'Flgs', is not the same as the enum type 'System.IO.FileAttributes'."
  • Как избежать повтора инклюдов в ООП PHP?

    @maxcad Автор вопроса
    FanatPHP, ну я просто гляжу на устройство других CMS. Например вордпресс, джумла, phpbb, dle.
    У них у всех в корне сайта лежит файл конфига в котором хранятся логин/пароль/хост к базе данных, ключи каких-то цифровых подписей, название сайта, ключевые слова и еще различные параметры.
    А ведь эти системы наверняка не новички делали и этот конфиг они не просто так придумали. И наверняка он глобальный и его данные используют множество классов.

    И вот мне стало интересно, а как у них реализована передача данных в классы из этого конфига. Пока я нашел три способа:
    1. инклюд файла в коде класса
    2. передача через аргументы конструктора
    3. через setConfig($config)

    Инклюд внутри кода класса позволит мне забыть об этом конфиге раз и навсегда. Но в итоге получатся избыточные инклюды.
    В остальных случаях мне придется постоянно помнить о передаче конфига при объявлении нового класса.

    Как-то это все неудобно.