Я думаю что все пользователи OS Engine читали статью про СИЛОВОЕ освобождение памяти в новой OSEngine
smart-lab.ru/company/os_engine/blog/1203290.php
как они это сделали, это конечно отдельный прикол в стиле.
Дремучим сибирским лесорубам подарили новуюяпонскую бензопилу. Подставили доску:
— Вжик! — сказала японская бензопила.
— Ух ты! — сказали дремучие сибирские лесорубы.Подставили бревно:
— Вжик! — сказала японская бензопила.
— Ух ты! — сказали дремучие сибирские лесорубы.Подставили железный лом:
— Крррр....! — сказала японская бензопила.
— А #ля! — сказали дремучие сибирские лесорубы.
Если вкратце, то большое выделение памяти происходит,
потому что в .NET сменили GC который используется по умолчанию на Server GC.
А раньше в NET.Framework по умолчанию был Workstation GC.
Можно вернуться к использованию Workstation GC, который выделяет память по другому
и быстрее освобождает, с помощью небольших настроек.
Но суровые российские разработчики OS Engine не умеют читать документацию
на непонятном вражеском языке и поэтому всегда по привычке используют ЛОМ для исправления ошибок.
Если вы все еще используете OS Engine ты мы уже идем к вам....
Зато каждый пост набирает одни и же 40-50 лайков. Ни одного комментария при этом. Ребята заморочились и ставят сами себе лайки с фейковых аккаунтов
Выводы по оценке кода
🔴 Критические проблемы:
Нарушение принципов SOLID - класс выполняет слишком много несвязанных обязанностей
Отсутствие обработки ошибок - много мест с потенциальными исключениями
Жестко закодированные значения - магические числа и строки усложняют поддержку
Синхронные HTTP-запросы - блокируют потоки, низкая производительность
Сложная бизнес-логика - методы трудно понимать и тестировать
🟡 Проблемы среднего уровня:
Слабая типизация - работа со строками вместо перечислений
Дублирование кода - повторяющиеся паттерны HTTP-запросов
Отсутствие модульных тестов - код невозможно адекватно протестировать
Проблемы с читаемостью - длинные методы и сложные условия
🟢 Положительные моменты:
Логическая структура - разделение на регионы
Базовое логирование - есть система уведомлений об ошибках
Инкапсуляция - разделение реализации и интерфейса
Общая оценка: 3/10
Код работает, но обладает серьезными архитектурными проблемами, низкой надежностью и сложностью поддержки. Требуется значительный рефакторинг для промышленного использования
И это только один файл. Представьте сколько там косяков… Привет васюрино!
И заодно под Linux на запускается.
❌ Критические недостатки:
Опасно ненадежный - упадет при первом же нестандартном ответе API
Неподдерживаемый - если MOEX изменит API, придется переписывать пол-класса
Медленный - сотни синхронных HTTP-запросов подряд
Хрупкий - любое изменение в данных вызовет исключения
💀 Профессиональные риски:
Нельзя использовать в продакшене - гарантированно приведет к потерям данных/денег
Нельзя тестировать - нет возможности написать нормальные тесты
Технический долг - каждая минута работы с этим кодом создает часы будущих проблем
🚩 Для контекста:
В профессиональной среде такой код:
Не прошел бы code review
Не был бы допущен в прод
Требовал бы полного переписывания
Вывод: Код выполняет свою задачу «на троечку» для личного использования, но абсолютно непригоден для коммерческого применения.
Резюме анализа кода TInvestServer🎯 Общая оценка: Требует серьезной доработки
Сильные стороны:
Полнофункциональность - покрывает все основные аспекты торгового подключения
Стабильность - развитая система обработки ошибок и восстановления соединений
Безопасность - корректная работа с потоками и лимитами API
Документированность - четкая структура и логическое разделение функционала
Критические проблемы:
Архитектурные нарушения - монолитный класс, нарушающий принцип единственной ответственности
Сложность поддержки - чрезмерная связанность кода и высокий порог входа для новых разработчиков
Риски стабильности - множественные потоки управления и сложные цепочки зависимостей
Проблемы масштабирования - жесткая архитектура затрудняет добавление нового функционала
Рекомендации по приоритетам:
Высокий приоритет - рефакторинг архитектуры, разделение ответственностей
Средний приоритет - улучшение управления ресурсами и потоками
Низкий приоритет - оптимизация производительности и уменьшение сложности
Вердикт: Код функционален в текущем состоянии, но представляет значительные риски для долгосрочной поддержки и развития. Требует структурного рефакторинга перед добавлением нового функционала.
Объективная оценка кода
🔴 Критические проблемы
1. Алгоритмические
Полный перебор без эвристик — O(∏nᵢ) сложность
Нет early stopping, pruning, sampling
5M+ итераций без оптимизации — unacceptable для production
2. Архитектурные
God Object (1000+ строк, 10+ ответственностей)
Нарушение всех принципов SOLID
Смешение логики оптимизации, создания ботов, конфигурации, многопоточности
3. Производительность
Thread.Sleep(1)— active waiting, CPU wasteПринудительный
GC.Collect()— memory management anti-patternБлокирующие циклы вместо async/await
4. Поддерживаемость
Дублирование сложной логики перебора
Methods > 150 строк с nested conditions
Magic numbers, hardcoded limits
🟡 Серьёзные недостатки
5. Error Handling
Частичная обработка исключений
Продолжение работы после критических ошибок
Нет graceful degradation
6. Тестируемость
Tight coupling делает unit testing невозможным
Зависимости от глобального состояния
Side effects everywhere
7. Безопасность
Нет валидации входных параметров
Потенциальные race conditions
Утечки ресурсов (серверы, потоки)
🟢 Единственные плюсы
8. Функциональность
Базовый пайплайн in-sample/out-of-sample работает
Поддержка разных типов стратегий
Прогресс-отчетность
9. Многопоточность
Basic parallelization есть
Управление количеством потоков
📊 Итоговая оценка
Техническое качество: 2/10
Работает, но неприемлемо для production
Высокие риски стабильности и масштабирования
Архитектура: 1/10
Полное отсутствие архитектурных принципов
Монолит с тесными связями
Алгоритмы: 1/10
Наивная реализация вместо domain-specific оптимизаций
Профессиональный уровень: Junior- Mid- уровень
Отсутствие knowledge of optimization algorithms
Незнание современных concurrency patterns
Limited understanding of software design
Вердикт
Код требует полного переписывания, а не рефакторинга. Текущая архитектура фундаментально неисправима.
Это типичный пример «working prototype», который ошибочно попал в продакшен без необходимой доработки.