Я использую очень простое приложение asp.net mvc с Entity Framework 6.0.2,.Net 4.5.1:
public class HomeController : Controller
{
public ActionResult Index()
{
int count;
using (var db = new LocalContext())
{
count = db.Counters.Count();
}
return View(count);
}
}
public class Counter
{
public int Id { get; set; }
}
public class LocalContext : DbContext
{
public DbSet<Counter> Counters { get; set; }
}
Если я выполняю нагрузку на нем, я в конечном итоге получаю исключение из памяти. (tinyget -srv:localhost -port:<port> -uri:/home/index/ -threads:30 -loop:5000
). В мониторе производительности я вижу, что поколение 2 Heap постоянно растет. Если я использую меньшее значение цикла (скажем, 500), размер увеличивается до тех пор, пока tinyget не остановится. Затем размер кучи остается неизменным (по крайней мере 20 минут, после чего я остановил сервер).
Что я делаю неправильно?
ИЗМЕНИТЬ
Итак, я попробовал предложение Саймона Моурье и отказался от кода EF. Тогда у меня нет проблем с памятью. Поэтому я подумал, может быть, если я использую Release вместо Debug, это будет иметь значение. И это было! Через некоторое время память была выпущена, и я мог разместить большую нагрузку на сайте. Затем я переключился обратно в Debug, чтобы узнать, могу ли я получить больше информации и... даже в режиме отладки больше нет проблем. FML, я работал над этим днем, и теперь я больше не могу воспроизвести его.