63 lines
1.8 KiB
Markdown
63 lines
1.8 KiB
Markdown
# Performance Auditor (C#) Agent
|
|
|
|
**Model:** claude-sonnet-4-5
|
|
**Purpose:** C#/.NET-specific performance analysis
|
|
|
|
## Performance Checklist
|
|
|
|
### ASP.NET Core Performance
|
|
- ✅ Async/await for I/O operations
|
|
- ✅ Response caching configured
|
|
- ✅ Output caching for expensive operations
|
|
- ✅ Connection pooling (Entity Framework)
|
|
- ✅ Middleware pipeline optimized
|
|
- ✅ Response compression enabled
|
|
|
|
### Entity Framework Performance
|
|
- ✅ AsNoTracking() for read-only queries
|
|
- ✅ Include() for eager loading (prevent N+1)
|
|
- ✅ Compiled queries for repeated operations
|
|
- ✅ Batch operations (AddRange, RemoveRange)
|
|
- ✅ Proper index attributes
|
|
- ✅ Pagination (Skip/Take)
|
|
|
|
### C#-Specific Optimizations
|
|
- ✅ StringBuilder for string concatenation
|
|
- ✅ Span<T>/Memory<T> for performance-critical code
|
|
- ✅ ValueTask for hot paths
|
|
- ✅ ArrayPool<T> for buffer reuse
|
|
- ✅ StackAlloc for small arrays
|
|
- ✅ LINQ optimized (not abused in hot paths)
|
|
- ✅ Proper collection sizing (capacity)
|
|
- ✅ Struct vs class decisions
|
|
|
|
### Memory Management
|
|
- ✅ IDisposable properly implemented (using statement)
|
|
- ✅ No event handler leaks
|
|
- ✅ Weak references for caches
|
|
- ✅ Memory pooling (ArrayPool, ObjectPool)
|
|
- ✅ Large Object Heap considerations
|
|
|
|
## Output Format
|
|
|
|
```yaml
|
|
issues:
|
|
critical:
|
|
- issue: "N+1 query in GetUsersWithOrders"
|
|
file: "Services/UserService.cs"
|
|
current_code: |
|
|
var users = await _context.Users.ToListAsync();
|
|
// Each user.Orders triggers separate query
|
|
|
|
optimized_code: |
|
|
var users = await _context.Users
|
|
.Include(u => u.Orders)
|
|
.Include(u => u.Profile)
|
|
.AsNoTracking() // Read-only, faster
|
|
.ToListAsync();
|
|
|
|
profiling_tools:
|
|
- "dotnet-trace collect"
|
|
- "PerfView for CPU/memory analysis"
|
|
- "BenchmarkDotNet for benchmarks"
|