• Как повысть скорость записи случайных блоков?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Можно попробовать использовать MemoryMappedFile:
    string path = @"1.dat";
    int len = 1024 * 1024;
    
    var rnd = new Random();
    var sw = Stopwatch.StartNew();
    
    var b = new byte[4];
    
    Console.WriteLine("Test started");
    
    using (var map = MemoryMappedFile.CreateFromFile(path, FileMode.Create, path, len))
    {
      using (var accessor = map.CreateViewAccessor())
      {
        for (var i = 0; i < len / 4; ++i)
        {
          b[0] = (byte)rnd.Next(0, 255);
          b[1] = (byte)rnd.Next(0, 255);
          b[2] = (byte)rnd.Next(0, 255);
          b[3] = (byte)rnd.Next(0, 255);
    
          accessor.WriteArray(rnd.Next(0, len / 4) * 4, b, 0, 4);
        }
      }
    }
          
    Console.WriteLine("Test end time - " + sw.ElapsedMilliseconds);
    Console.ReadKey();
    Ответ написан
  • Почему именно синус?

    fornit1917
    @fornit1917
    Это прямо следует из определения синуса и косинуса. sin(x) - ордината точки единичной окружности с дугой угла x, cos(x) - абсцисса.
    1024px-Trigonometric_function.png
    Ответ написан
    7 комментариев
  • Как получить от Arduino аналоговый выходной сигнал 0-10В?

    @Eddy_Em
    Очевидно, можно
    а) ШИМить мосфетом 10-12-вольтное внешнее напряжение
    б) использовать готовый импульсный ШИМ-драйвер
    в) использовать схему умножения
    г) сигнал с ЦАПа или фильтрованный ШИМ подавать на вход операционного усилителя (соответственно, запитывать его напряжением 10..12В)
    ...) всех вариантов и не припомнить сразу
    Ответ написан
    Комментировать
  • Цикл в 100.000 итераций vs "умного" цикла?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Мне кажется что написан какой то бред если честно
    Ответ написан
    Комментировать
  • Что за страности в Stream в.NET?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    ReadByte возвращает тип int, т.к. при достижении конца будет возвращено значение минус один. А тип byte может иметь значение в диапазоне от нуля до 255. То есть, считывая байты, сообщить о достижении конца потока при помощи типа byte невозможно (байт, имеющий значение ноль может быть полезным байтом), поэтому используется тип int.

    Метод Read принимает буфер, в который будут помещены считанные данные. Буфер - это массив байт. Изначально он должен быть пустым. Размер массива - по своему смотрению. Чем больше размер буфера, тем больше данных будет помещено в память, меньше проделано операций.

    Метод Read возвращает число помещенных в буфер байт. Ноль - достигнут конец потока.

    FileInfo f = new FileInfo(@"C:\example.dat");
    using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
     using (BinaryReader br = new BinaryReader(fs))
     {
       int bytesRead = 0;
       byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
       StringBuilder result = new StringBuilder();
       while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
       {
         // из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
       }
     }
    }

    Массивы являются ссылочными типами и нет необходимости использовать out.
    Ответ написан
    3 комментария
  • Какую ос выбрать для слабого пк?

    Spetros
    @Spetros
    IT-шник
    Нормальный компьютер для XP и 7-ки 32-битной.
    Интернет тормозит, потому что памяти для обработки современных страничек у него уже маловато. Можно часть плагинов и красивостей в браузере отключить и меньше страниц одновременно открывать. Замена ОС ситуацию не изменит.
    Ответ написан
    Комментировать
  • Как создать красивую google карту на сайт?

    @Haos616
    У меня только один пока вопрос. Что такое "красивая карта"?
    Ответ написан
    Комментировать
  • Как заставить Windows стартовать с SSD при отключенном HDD?

    zmeyjr
    @zmeyjr
    Дисклеймер в профиле.
    загрузится в режиме восстановления, консоль, fixboot, Fixmbr
    тут с картинками www.howtogeek.com/howto/32523/how-to-manually-repa...
    Ответ написан
    Комментировать
  • Как войти в другой компьютер по локальной сети (СРОЧНО нужна помощь)?

    @tartarelin
    Копирование без логинов, паролей за минимальное время
    выключаем компьютеры
    берём крестовую отвёртку, вскрываем системник. откручиваем винчестер
    вскрываем другой системник, подключаем винчестер
    включаем компьютер, с загрузкой с правильного диска и копируем
    Ответ написан
    Комментировать
  • Как войти в другой компьютер по локальной сети (СРОЧНО нужна помощь)?

    @shaazz
    Копирование без логинов, паролей
    нажимаем "Пуск", выбираем "Выполнить", вводим GPEDIT.MSC
    Конфигурация компьютера\Конфигурация Windows\Параметры безопасности\Локальные политики\Параметры безопасности\
    1. находим "Сетевой доступ: модель совместного доступа и безопасности ..." Меняем с обычной модели на гостевую.
    2. там же также находим "Учетные записи: состояние учетной записи Гость" и ставим "Включен"
    3. находим ветвь Конфигурация компьютера\Конфигурация Windows\Параметры безопасности\Локальные политики\Назначение прав пользователя, "Отказ в доступе к компьютеру по сети", дважды щелкаем по нему, подсвечиваем «Гостя», нажимаем "Удалить"

    После этого шарим нужную папку и она доступна по сети без логинов паролей
    Ответ написан
    1 комментарий
  • Альтернатива Google Desktop Search

    lebowski
    @lebowski Автор вопроса
    Мда… Нет короче ничего. Еще одна капелька на чашу перехода под мак.
    Ответ написан
    1 комментарий
  • C# и шифрование данных

    Bartez
    @Bartez
    /// /// Шифрует строку value
    ///
    /// Строка которую необходимо зашифровать
    /// Ключ шифрования
    public static string Encrypt(string str, string keyCrypt)
    {
    return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(str), keyCrypt));
    }

    /// /// Расшифроывает данные из строки value
    ///
    /// Зашифрованая строка
    /// Ключ шифрования
    /// Возвращает null, если прочесть данные не удалось
    [DebuggerNonUserCodeAttribute]
    public static string Decrypt(string str, string keyCrypt)
    {
    string Result;
    try
    {
    CryptoStream Cs = InternalDecrypt(Convert.FromBase64String(str), keyCrypt);
    StreamReader Sr = new StreamReader(Cs);

    Result = Sr.ReadToEnd();

    Cs.Close();
    Cs.Dispose();

    Sr.Close();
    Sr.Dispose();
    }
    catch (CryptographicException)
    {
    return null;
    }

    return Result;
    }

    private static byte[] Encrypt(byte[] key, string value)
    {
    SymmetricAlgorithm Sa = Rijndael.Create();
    ICryptoTransform Ct = Sa.CreateEncryptor((new PasswordDeriveBytes(value, null)).GetBytes(16), new byte[16]);

    MemoryStream Ms = new MemoryStream();
    CryptoStream Cs = new CryptoStream(Ms, Ct, CryptoStreamMode.Write);

    Cs.Write(key, 0, key.Length);
    Cs.FlushFinalBlock();

    byte[] Result = Ms.ToArray();

    Ms.Close();
    Ms.Dispose();

    Cs.Close();
    Cs.Dispose();

    Ct.Dispose();

    return Result;
    }

    private static CryptoStream InternalDecrypt(byte[] key, string value)
    {
    SymmetricAlgorithm sa = Rijndael.Create();
    ICryptoTransform ct = sa.CreateDecryptor((new PasswordDeriveBytes(value, null)).GetBytes(16), new byte[16]);

    MemoryStream ms = new MemoryStream(key);
    return new CryptoStream(ms, ct, CryptoStreamMode.Read);
    }


    Работающий код из реального проекта.
    Ответ написан
    Комментировать
  • C# + sqlite, несколько вопросов

    andrew_kane
    @andrew_kane
    >> Нужно устанавливать связь с базой данных при открытии программы. Как я понял, за это отвечает первая строка (ObjConnection = new SQLiteConnection). Куда это лучше перенести?
    Вообще обычно для таких целей создаётся уровень доступа к данным, отдельный от уровня представления, который инкапсулирует в себе всю логику по управлению запросами к бд (гуглить «n-tier application»). Держать постоянно открытым одно подключение — не самый лучший вариант. Но к сожалению, не могу сказать, как обстоят дела с кэшированием подключений в этом sqlite-провайдере, тут уже надо тестировать.

    >> Где и как лучше хранить это соединение с базой, чтобы я всегда смог получить к нему доступ (что-то типа глобальной переменной)?
    Для десктопных приложений — стандартный конфигурационный файл app.config (задать значения для строк подключений можно через Project Settings -> Settings, у записи указываете scope = Application, тогда её значение доступно через %namespace%.Properties.Settings)

    >> Как мне сделать запрос, который вытащит одну строку, чтобы в дальнейшем с ней работать? Нужно что-то типа ObjConnection.query(«SELECT login FROM users WHERE id = 1»)
    ExecuteReader()
    Ответ написан
    Комментировать