72 lines
2.2 KiB
C#
72 lines
2.2 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SqrtSpace.SpaceTime.AspNetCore;
|
|
using SqrtSpace.SpaceTime.Core;
|
|
using SqrtSpace.SpaceTime.EntityFramework;
|
|
using SqrtSpace.SpaceTime.Linq;
|
|
using SampleWebApi.Data;
|
|
using SampleWebApi.Services;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// Add services to the container
|
|
builder.Services.AddControllers();
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen(c =>
|
|
{
|
|
c.SwaggerDoc("v1", new() {
|
|
Title = "SqrtSpace SpaceTime Sample API",
|
|
Version = "v1",
|
|
Description = "Demonstrates memory-efficient data processing using √n space-time tradeoffs"
|
|
});
|
|
});
|
|
|
|
// Configure SpaceTime services with memory-aware settings
|
|
builder.Services.AddSpaceTime(options =>
|
|
{
|
|
options.EnableCheckpointing = true;
|
|
options.CheckpointDirectory = Path.Combine(Path.GetTempPath(), "spacetime-sample");
|
|
options.CheckpointStrategy = CheckpointStrategy.SqrtN;
|
|
options.DefaultChunkSize = 1000;
|
|
options.StreamingBufferSize = 64 * 1024; // 64KB
|
|
options.ExternalStorageDirectory = Path.Combine(Path.GetTempPath(), "spacetime-external");
|
|
});
|
|
|
|
// Add Entity Framework with in-memory database for demo
|
|
builder.Services.AddDbContext<SampleDbContext>(options =>
|
|
{
|
|
options.UseInMemoryDatabase("SampleDb");
|
|
// SpaceTime optimizations are available via EF integration
|
|
});
|
|
|
|
// Add application services
|
|
builder.Services.AddScoped<IProductService, ProductService>();
|
|
builder.Services.AddScoped<IOrderAnalyticsService, OrderAnalyticsService>();
|
|
builder.Services.AddHostedService<DataGeneratorService>();
|
|
|
|
// Configure memory limits
|
|
builder.Services.Configure<SampleWebApi.Models.MemoryOptions>(builder.Configuration.GetSection("MemoryOptions"));
|
|
|
|
var app = builder.Build();
|
|
|
|
// Configure the HTTP request pipeline
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
|
|
// Enable SpaceTime middleware for automatic memory management
|
|
app.UseSpaceTime();
|
|
|
|
app.MapControllers();
|
|
|
|
// Ensure database is created and seeded
|
|
using (var scope = app.Services.CreateScope())
|
|
{
|
|
var context = scope.ServiceProvider.GetRequiredService<SampleDbContext>();
|
|
await DataSeeder.SeedAsync(context);
|
|
}
|
|
|
|
app.Run(); |