1
給定一個實體,像一個的DbContext裝載大字符串屬性的實體時,以下幾點:業績不佳使用實體框架
public class Entity
{
public int Id {get;set;}
public string LargeString {get;set;}
}
public class MyDbContext : DbContext
{
public DbSet<Entity> Entities {get;set;}
}
,並存儲在數據庫Id
42和LargeString
包含XML的一些兩兆字節的實體。下面以半分鐘左右,偶爾給OutOfMemoryException
:
using (var dbContext = new MyDbContext())
{
var entity = await dbContext.Entities.SingleAsync(e => e.Id == 42);
}
與此同時,以下小巧玲瓏的查詢執行以毫秒爲單位:
using (var dbContext = new MyDbContext())
{
var entity = await dbContext.Database.Connection
.Query<Entity>("SELECT Id, LargeString FROM Entities WHERE Id = 42")
.SingleAsync();
}
是否有可能以某種方式暗示實體框架LargeString
屬性可能會很大(以這種方式可以使實體框架在此方案中可接受)。
嘗試'dbContext.Entities.AsNoTracking()單(E => e.Id == 42);'如果修復程序讓我知道 –
好建議,我會盡力回覆你:) –
'AsNoTracking()'不會顯着提高性能。然而,我的一位同事指出,我們這個問題簡化的生產代碼是異步的,這可能與性能有關,所以我更新了示例代碼以反映這一點。 –