# bquant.core.performance — Производительность

## Обзор

Инструменты мониторинга и оптимизации: метрики, глобальный монитор, декораторы и контексты, набор оптимизированных индикаторов, бенчмарки.

## Сущности

- `PerformanceMetrics`: структура метрик (время, память, CPU, и т.д.)
- `PerformanceMonitor`:
  - `record(metrics)`, `get_stats(function_name=None)`, `clear_stats(function_name=None)`, `export_stats(file_path=None) -> DataFrame`
- `get_performance_monitor()`
- Декоратор: `@performance_monitor(enable_cpu=True, enable_memory=True)`
- Контекст: `performance_context(name)`
- `OptimizedIndicators`: `sma(prices, period)`, `ema(prices, period)`, `rsi(prices, period=14)`, `macd(prices, fast=12, slow=26, signal=9)`, `bollinger_bands(prices, period=20, std_dev=2)`
- Бенчмаркинг: `benchmark_function(func, *args, iterations=100, **kwargs)`, `compare_implementations(implementations, test_data, iterations=50) -> DataFrame`, `memory_usage_analysis(func, *args, **kwargs)`

## Примеры

Мониторинг функции:
```python
from bquant.core.performance import performance_monitor, get_performance_monitor

@performance_monitor()
def compute():
    import time; time.sleep(0.2)

compute()
print(get_performance_monitor().get_stats())
```

Контекст измерений:
```python
import time
from bquant.core.performance import performance_context


def process():
    time.sleep(0.1)

with performance_context("data_processing"):
    process()
```

Оптимизированные индикаторы (NumPy):
```python
import numpy as np
from bquant.core.performance import OptimizedIndicators

prices = np.random.rand(1000)
sma = OptimizedIndicators.sma(prices, 20)
```

Бенчмарк реализаций:
```python
from bquant.core.performance import compare_implementations

impls = {
    'py_impl': lambda arr: sum(arr) / len(arr),
    'np_impl': lambda arr: arr.mean(),
}

import numpy as np
arr = np.random.rand(10_000)
print(compare_implementations(impls, arr, iterations=20))
```
