[英]saving to database takes too long
在我的應用程序中,創建一個userControl,然后將其保存到數據庫中。 這是我保存userControl的方法:
private void SaveControl(byte userControlType, ISelectableViewModel viewModel, Guid guid)
{
var context = new EntitiesNew();
var instrumentSettings = new INSTRUMENTSETTINGS
{
USERCONTROL = userControlType,
INSTRUMENTHEIGHT = (float)viewModel.InstrumentHeight,
INSTRUMENTWIDTH = (float)viewModel.InstrumentWidth,
INSTRUMENTSCALABLEVALUE = viewModel.ScalableValue,
INSTRUMENTPOSTOLEFT = (float)viewModel.InstrumentPosToLeft,
INSTRUMENTPOSTOTOP = (float)viewModel.InstrumentPosToTop,
INSTRUMENTZINDEX = viewModel.ZIndex,
CREATED_BY= guid
};
context.INSTRUMENTSETTINGSs.Add(instrumentSettings);
context.SaveChanges();
viewModel.ControlId = instrumentSettings.INSTRUMENTSETTINGSID;
var roomId = (from room in context.ROOMs
where room.ROOMNAME == viewModel.RoomName
select room.ROOMID).FirstOrDefault();
var roomWithInstrument = new ROOMWITHINSTRUMENT
{
CREATED_BY = guid,
INSTRUMENTSETTINGSID = viewModel.ControlId,
ROOMID = roomId
};
context.ROOMWITHINSTRUMENTs.Add(roomWithInstrument);
context.SaveChanges();
}
沒有錯誤,並且正在運行。 唯一的問題是,當我第一次將記錄保存到數據庫時,它花費的時間太長(例如2秒)。 第一次保存后,它會更好地工作(不到一秒鍾)。 所以我的問題是-如何改善首次儲蓄,這樣可以更快地儲蓄?
首先,您應該將上下文放在using
塊中
private void SaveControl(byte userControlType, ISelectableViewModel viewModel, Guid guid)
{
using(var context = new EntitiesNew())
{
var instrumentSettings = //...
//...
context.SaveChanges();
}
}
如果不這樣做,則操作完成后並沒有將連接釋放回連接池,這可能會在程序運行時導致性能問題。
關於您的實際問題:實體框架在每個連接到數據庫的AppDomain第一次執行很多額外的“工作”。 您會看到它發生在您調用的第一個查詢中,但是您可以更快地使它發生。
public static void InitializeDatabaseConnection()
{
using(var context = new EntitiesNew())
{
context.Database.Initialize(false);
}
}
該方法將初始化當前AppDomain的連接,並允許第一個查詢更快。 我只是在程序開始時在任務內運行此方法。
public static void Main(string[] args)
{
//Assumes you put the function inside the EntitiesNew class
Task.Run(() => EntitiesNew.InitializeDatabaseConnection());
Application.Run(new Form1());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.