OnlineSystemNull 을 데디 서버에서 사용하는 경우 OnlineAsyncTaskThreadNull 이 돌고 있는데 코드에서 사용하는 곳이 없었다. 엔진 코드를 뜯어 고쳐서 Thread 가 생성되지 않게 할 수도 있지만 설정만으로 cpu 를 덜 사용하게 할 수는 있다.

// FOnlineAsyncTaskManager::Run

do 
{
// Wait for a trigger event to start work
WorkEvent->Wait(PollingInterval);
if (!bRequestingExit)
{
Tick();
}
}

OnlineAsyncTaskThreadNull 은 PollingInterval 마다 sleep 하는 구조다. PollingInterval 의 기본값은 50ms 인데 -1(INFINITI) 값을 주면 Queue 에 작업을 줄 때 까지 Sleep 시킬 수 있다.

// FOnlineAsyncTaskManager::Init

if (GConfig->GetInt(TEXT("OnlineSubsystem"), TEXT("PollingIntervalInMs"), PollingConfig, GEngineIni))
{
PollingInterval = (uint32)PollingConfig;
}

초기화 코드를 보면 Engine.ini 에서 설정 가능하다.

[OnlineSubsystem]
PollingIntervalMs=-1

위와 같은 섹션을 추가 혹은 수정하면 된다. PollingIntervalMs 는 int 로 읽어서 unsigned int 로 변환된다.