Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:40:21 +08:00
commit 17a685e3a6
89 changed files with 43606 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
# 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"