기본 콘텐츠로 건너뛰기

2월, 2023의 게시물 표시

SQLite Bulk Insert

SQLite에는 데이터를 대량 삽입하는 특별한 방법이 없습니다. 데이터를 삽입하거나 업데이트할 때 최적의 성능을 얻으려면 다음을 수행해야 합니다. - 트랜잭션을 사용하세요. - 데이터베이스에 연결하는 횟수를 줄이세요.(Command를 하나만 생성하여 재사용) - 동일한 매개 변수를 사용하여 명령을 다시 사용하세요. using (var transaction = connection.BeginTransaction()) { var command = connection.CreateCommand(); command.CommandText = @" INSERT INTO Markup(UID, Color) VALUES ($UID, $Color) "; var paramUID = command.CreateParameter(); paramUID.ParameterName = "$UID"; var paramColor = command.CreateParameter(); paramColor.ParameterName = "$Color"; command.Parameters.Add(paramUID); // Insert a lot of data var random = new Random(); for (var i = 0; i < 1500000; i++) { paramUID.Value = random.Next(); paramColor.Value = "FFFFFF"; command.ExecuteNonQuery(); } transaction.Commit(); } 단일 건마다 Command를 생성하여 쿼리를 실행하는 것보다 엄청난 성능 향상을 볼 수 있습니다.

유용한 Visual Studio 확장 기능

유용한 Visutal Studio 확장 기능을 소개해 드리고자 합니다. 1. SonarLint      1. 정적 분석을 통해 잠재적인 코드 상의 오류 사항 표시 및 개선 코드를 제시해 줍니다.      2. 개선 코드 제시 var blk = ViewModelControl.Blocks.Where(param => param.Name.Equals((node.DataBoundItem as Wbs).UID)).FirstOrDefault(); if (blk != null) { ViewModelControl.Blocks[(node.DataBoundItem as Wbs).UID].Entities.SelectAll(); } var blk = ViewModelControl.Blocks.Where(param => param.Name.Equals((node.DataBoundItem as Wbs).UID)).FirstOrDefault(); if (blk != null) { ViewModelControl.Blocks[(node.DataBoundItem as Wbs).UID].Entities.SelectAll(); } 위 코드에 대해서 아래와 같은 개선 코드를 제시해 줍니다.(Where 대신에 FirstOrDefault를 사용하라고 함) 위 제안대로 바꾸면 같은 동작을 하는 좀더 간단한 코드로 바꿀 수 있습니다. var blk = ViewModelControl.Blocks.FirstOrDefault(param => param.Name.Equals((node.DataBoundItem as Wbs).UID)); if (blk != null) { ViewModelControl.Blocks[(node.DataBoundItem as Wbs).UID].Entities.Se