You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
원인은 계산을 위해 잦은 DB의 접근, 특히나 덩치가 큰 DB에 접근하는 횟수가 많은 것으로 판단했다.
결과(해결방안)
DB에 접근하는 횟수가 적어질 수록 빨라질 것이라 판단하여, 계산식을 작동시키면 먼저 필요한 데이터를 전부 DB에 접근하여 받아온 다음 계산식이 진행되는 동안에는 DB에 접근하지 않도록 프로그래밍함
그 결과, 생각 이상으로 시간을 줄이는 데 성공함
동대문구, 커피전문점 기준 약 12초
참고할 코드나 스크린샷
publicList<AnnualEvaluationScoreModel>GetAnnualEvaluationScoreModels(intupperLocationId,intfieldId){// 미리 DB에 접근하여 필요한 만큼 데이터를 가져오는 부분List<Station>stations=Dao.Station.GetByUpperLocation(upperLocationId);List<LandPriceIndex>landPriceIndices=Dao.LandPriceIndex.GetByLocation(upperLocationId);List<Competitor>competitors=Dao.Competitor.GetByField(fieldId);// 계산을 진행하여 모델을 생성하는 부분. DB에 접근할 경우를 최소화하여 컬렉션의 데이터로 계산을 진행한다List<AnnualEvaluationScoreModel>models=newList<AnnualEvaluationScoreModel>();foreach(varstationinstations){List<FootTraffic>footTraffics=Dao.FootTraffic.GetByStation(station.StationId);// ...}// ...returnmodels;}
FootTraffic 테이블에 들어갈 csv파일 데이터를 EF를 이용해 저장하려고 했는데, 프로그램이 버벅대고 진행되지 않는 문제가 발생
원인 해결을 위해 처음에는 직접 저장하는 대신 Query문을 만들어 SQL파일로 SSMS를 이용해 저장하려고 함
하지만 SSMS에서도 Query문이 너무 길어서 메모리 문제가 발생(SSMS가 32bit로 작동하기 때문인 것으로 추측됨)
결과(해결방안)
그래서 선생님과 논의한 결과, 해당 CSV파일의 데이터를 전부 읽어서 한꺼번에 입력하는 것이 아니라 한 줄씩 읽어서 입력하는 방식으로 수정함
비록 느리기는 하지만 차근차근 DB에 값이 들어가고 있고, Visual Studio 디버그 모드의 진단 도구를 통해 메모리 문제가 발생하지 않는것을 확인함
참고할 코드나 스크린샷
// beforefor(inti=0;i<rows.Count;i++){// ...}// for문으로 파일의 내용을 전부 읽어들인 다음 DB에 입력using(varcontext=DbContextCreator.Create()){context.FootTraffics.AddRange(footTraffics);context.SaveChanges();}// -----------------------------------------------------------------// afterfor(inti=0;i<rows.Count;i++){// ...// 한 줄을 읽은 다음 DB에 입력using(varcontext=DbContextCreator.Create()){context.FootTraffics.AddRange(footTraffics);context.SaveChanges();}}