[C#] INI 파일 대량 데이터 빠르게 저장하는 방법

2025. 4. 17. 09:22개발이야기

728x90
반응형

문제 상황

모델이나 설정 데이터를 100개 이상 저장해야 하는 경우, Write()를 순차적으로 호출하면 속도가 매우 느려질 수 있습니다. 특히 UI가 멈추거나, 사용자 경험이 저하되기도 합니다.

이를 해결하기 위해선 다음과 같은 방법이 효과적입니다:


1. 비동기 + 병렬 처리 구조

public async Task SaveModelListAsync(List<ModelData> models)
{
    await Task.Run(() =>
    {
        Parallel.For(0, models.Count, i =>
        {
            var model = models[i];
            IniFile ini = new IniFile($"Models/{i}.ini");
            ini.Write("Info", "ModelNum", model.modelNum.ToString());
            ini.Write("Info", "Type", ((int)model.type).ToString());
            ini.Write("Info", "Method", ((int)model.pmMethod).ToString());
            ini.Write("ROI", "TopLeftX", model.roi.topLeftX.ToString());
            ini.Write("ROI", "TopLeftY", model.roi.topLeftY.ToString());
        });
    });
}

-. Task란?

Task는 비동기 작업을 수행할 때 사용하는 .NET의 클래스입니다.
Task.Run()은 백그라운드에서 작업을 실행하고, 메인 UI 스레드를 차단하지 않습니다.

  • UI 멈춤 없이 작업 가능
  • await 키워드로 완료 시점 제어 가능

-. Parallel.For란?

Parallel.For는 반복문을 병렬로 처리하는 .NET의 고속 루프입니다.
여러 개의 CPU 코어를 활용해 동시에 여러 작업을 처리합니다.

  • 대량 반복 작업에 매우 유리
  • 순차적인 처리보다 훨씬 빠름

 2. 파일 IO 최적화 팁

  • INI 파일이 많을 경우 Directory.CreateDirectory("Models")로 미리 폴더 생성
  • 쓰기 전에 File.Exists() 체크로 중복 방지
  • 불필요한 Write 호출 방지를 위해 값 변경 시만 저장하도록 조건 처리

 

복잡한 설정이 아니라면 INI 파일은 여전히 훌륭한 선택지입니다.
Win32 API만으로도 외부 라이브러리 없이 깔끔하게 처리할 수 있고,
C#에서는 위처럼 간단한 클래스만으로도 충분히 실무에 활용 가능합니다.

728x90
반응형