This commit is contained in:
2020-01-24 15:44:20 +00:00
parent 9993835482
commit 0d01532e35
5 changed files with 12 additions and 20 deletions

View File

@@ -11,7 +11,7 @@ Baseline from before doing anything seeding a medium level with full text
2020-01-21 16:49:39.4481|INFO|Seeder|500 Widgets seeded in 21968 ms 2020-01-21 16:49:39.4481|INFO|Seeder|500 Widgets seeded in 21968 ms
After round one of improvements (less text in seed data notes, not calling savechanges or add async) After round one of improvements (less text in seed data notes, not calling savechanges or add async)
//about 2 seconds came from the async db stuff and the rest was from using less text so less indexing which isn't really a permanent solution just a minor one //about 2 seconds came from the async db stuff and the rest was from using less text so less indexing which isn't really a permanent solution just a workaround
2020-01-23 16:57:57.0422|INFO|Seeder|75 Users seeded in 2398 ms 2020-01-23 16:57:57.0422|INFO|Seeder|75 Users seeded in 2398 ms
2020-01-23 16:58:11.9983|INFO|Seeder|500 Widgets seeded in 14958 ms 2020-01-23 16:58:11.9983|INFO|Seeder|500 Widgets seeded in 14958 ms
@@ -20,7 +20,7 @@ TODO: Search indexing is painfully slow, it accounts for 16 of 22 seconds when c
- Re-code it not using EF but directly interacting with the DB - Re-code it not using EF but directly interacting with the DB
- Maybe it's a case for stored procedures or something? - Maybe it's a case for stored procedures or something?
TODO: DataFilter how to distinguish between filtering on specific ID value or on value column TODO: DataFilter how to distinguish between filtering on specific ID value or on value column

View File

@@ -176,7 +176,7 @@ namespace AyaNova.Api.Controllers
/// <param name="apiVersion">Automatically filled from route path, no need to specify in body</param> /// <param name="apiVersion">Automatically filled from route path, no need to specify in body</param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<IActionResult> PostWidget([FromBody] Widget inObj, ApiVersion apiVersion) public IActionResult PostWidget([FromBody] Widget inObj, ApiVersion apiVersion)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason));
@@ -192,7 +192,7 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//Create and validate //Create and validate
Widget o = await biz.CreateAsync(inObj); Widget o = biz.Create(inObj);
if (o == null) if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else

View File

@@ -458,7 +458,7 @@ namespace AyaNova.Biz
/// <summary> /// <summary>
/// Process the keywords into the dictionary /// Process the keywords into the dictionary
/// NOTE: NAME parameter is in ADDITION to the NAME also being on of the strings passed in text parameter /// NOTE: NAME parameter is in ADDITION to the NAME also being one of the strings passed in text parameter
/// </summary> /// </summary>
private static void ProcessKeywords(SearchIndexProcessObjectParameters p, bool newRecord)//long localeId, long objectID, AyaType objectType, string name, params string[] text) private static void ProcessKeywords(SearchIndexProcessObjectParameters p, bool newRecord)//long localeId, long objectID, AyaType objectType, string name, params string[] text)
{ {

View File

@@ -67,7 +67,7 @@ namespace AyaNova.Biz
//route linked version for external api access //route linked version for external api access
internal async Task<Widget> CreateAsync(Widget inObj) internal Widget Create(Widget inObj)
{ {
Validate(inObj, null); Validate(inObj, null);
if (HasErrors) if (HasErrors)
@@ -83,22 +83,14 @@ namespace AyaNova.Biz
outObj.Tags = TagUtil.NormalizeTags(outObj.Tags); outObj.Tags = TagUtil.NormalizeTags(outObj.Tags);
outObj.CustomFields = JsonUtil.CompactJson(outObj.CustomFields); outObj.CustomFields = JsonUtil.CompactJson(outObj.CustomFields);
//Save to db //Save to db
var TheContext = ct;
if (TheContext == null)
TheContext = ServiceProviderProvider.DBContext;
//TEST SPEED IMPROVEMENTS
//ORIGINALLY
// await TheContext.Widget.AddAsync(outObj);
// await TheContext.SaveChangesAsync();
//add syncronously and don't save but let the log save //add syncronously and don't save but let the log save
//THIS SAVED 1 SECOND OUT OF 22 for seeding 500 widgets //THIS SAVED 1 SECOND OUT OF 22 for seeding 500 widgets
TheContext.Widget.Add(outObj); ct.Widget.Add(outObj);
//Handle child and associated items: //Handle child and associated items:
EventLogProcessor.LogEventToDatabaseAndSaveEntireContext(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), TheContext); EventLogProcessor.LogEventToDatabaseAndSaveEntireContext(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), ct);
//This takes 16 seconds out of 22 when seeding 500 widgets //This takes 16 seconds out of 22 when seeding 500 widgets
@@ -106,7 +98,7 @@ namespace AyaNova.Biz
//This takes 2 seconds out of 22 when seeding 500 widgets //This takes 2 seconds out of 22 when seeding 500 widgets
TagUtil.ProcessUpdateTagsInRepository(TheContext, outObj.Tags, null); TagUtil.ProcessUpdateTagsInRepository(ct, outObj.Tags, null);
return outObj; return outObj;
} }

View File

@@ -622,7 +622,7 @@ namespace AyaNova.Util
//var NewObject = Cached_WidgetBiz.CreateAsync(o).Result; //var NewObject = Cached_WidgetBiz.CreateAsync(o).Result;
//test without cached widgetbiz //test without cached widgetbiz
WidgetBiz biz = WidgetBiz.GetBizInternal(ServiceProviderProvider.DBContext); WidgetBiz biz = WidgetBiz.GetBizInternal(ServiceProviderProvider.DBContext);
var NewObject = biz.CreateAsync(o).Result; var NewObject = biz.Create(o);
if (NewObject == null) if (NewObject == null)
{ {
log.LogError($"Seeder::GenSeedWidget error creating widget {o.Name}\r\n" + biz.GetErrorsAsString()); log.LogError($"Seeder::GenSeedWidget error creating widget {o.Name}\r\n" + biz.GetErrorsAsString());