試行錯誤ですが何か

定年親父がとりとめもなく、自己満足で日々やった事や感じた事、思ったことを書いています。ムンクが好きです。

有力な情報がありましたので「DCSノンフリーズ対応BAT」というものを作ってみました

↓ 2025/10/26 こちらでEXE版を公開しています。

x-hannibal.hatenablog.com

 

--------------------------------------------------------------------------------------------

Digital Combat Simulator World(略してDCS)というEagle Dynamics社の軍用機フライトシミュレーションは今風のフライトシムで、たまに動かして遊んでいたのですが、時々いや結構頻繁にフリーズすることがあり困っていました。


かなり作りこまれてグラフィックも美しいので飛んでいて凄く楽しいのですが、突然画面が固まって動かなくなるなるようなソフトでは安心して空を飛ぶ気分にはなれません。

ということで最近はPCの肥し(注1)になっていました。

 

今日、それを解決する有力な情報が手に入りました。ありがとうございます。

crafter21.hatenablog.com

 

内容的には

①該当ソフトウェアが「CPU 0」を使うのを制限する
②該当ソフトウェアの「優先度の設定」を「高」に格上げする

というもので、変更内容としては「なるほどそうか」と思わせるものです。

DCSの場合「CPU 0」を使用すると動作が不安定になるという事がある様です。
(ソフトが古い? 開発環境が最新でないものを使ってるとかかなぁ)


フリーズ解消の手段は解りましたが、毎回設定をしなければならないので定年親父にはこれは辛いです。めんどくさいです。やりたくないです


ということで一連の動作を一発でできるBATファイルを作成してみました。(情シスの時代の仕事を思い出します)


本当はBATファイルからプログラムを起動して上記①②を設定する方法をとりたかったのですが、何回やっても上手く行かなかったので、プログラムを起動させてから上記①②を設定(変更)する方法にしました。

 

 

< 前提条件 >

ホストPCは Windows11 24H2

DCSの起動はSteam経由 ←これが上手くいかなかった原因かもしれません

intel CPU i9-13900K 対象 (24コア32スレッド:CPU 0~CPU 31)

 

 

< BATファイルの中身:起動DCS_CPU0除外_高設定_13900K.bat >

 

@echo off
REM 起動中の DCS.exe の PID を取得して、CPU 0 を除外・優先度を高に設定

for /f "tokens=2 delims==;" %%A in ('"wmic process where (name='DCS.exe') get ProcessId /format:list | findstr ProcessId"') do (
    REM アフィニティを i9-13900Kに設定
    "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -NoProfile -Command ^
    "(Get-Process -Id %%A).ProcessorAffinity = 4294967294"

    REM 優先度を High に設定
    "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -NoProfile -Command ^
    "(Get-Process -Id %%A).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::High"
)

echo 処理が完了しました。
pause

 


<動作手順>


1.Steam経由でDCSを起動させる



2.LAUNCH DCS の画面が出たら上記BATファイルを実行(管理者として実行を推奨)

 


3.下記画面のメッセージが出たら正常にバッチ処理が終了



 このメッセージの時は、DCSがまだ立ち上がっていなかったので処理出来ていない(失敗です)

 

4.画面に従い、何かキーを押して終了。後は思いっきり遊んでください!

 

 

 

< 設定内容の確認 >

念のためDCS.exeを確認してみます


優先度の設定は「通常」から「高」になっています。


関係の設定は CPU 0 のみチェックがはずれているのを確認

 

最後のほうはこうなっています。

CPU 1からCPU 31 まではチェック入りです。

 


 < BATファイルの変更について >

例えば、Intel CPU i7-14700KFを使っている場合は20コア28スレッドのCPUなので、

上記BAT内容の ProcessorAffinity = 4294967294 を ProcessorAffinity = 268435454 に変更してください。

 

ProcessorAffinityの数字の考え方は、例えば4スレッドのCPUの場合

使うのは CPU 3、CPU 2、CPU 1でビットを1にする。CPU 0は除外するのでここのビットは0

並べると1110

1110(2進法)→ 14(10進法) ProcessorAffinity= 14 になります。

 

Excelの計算式では下記の式で求められます

=(2^n-1)-1       n=CPUのスレッド数

 


< 余談? >

その1

ちなみに、32スレッドのi9-13900KのPCで28スレッドi7-14700KF用のバッチを実行したらこうなります。

CPU 28 ~ CPU 31 のチェックが外れます(使用されなくなる)

 

その2

 i5-7400T(4コア4スレッド)のPCでi9-13900K用のbatファイルを実行したらこんなメッセージが出ました。

 

 

 

有力な情報があるとやる気が出ます。
今回、久しぶりに頭を使ったような気がします。
ニッチな話題ですが・・・・。(毎回言ってる)

 

注1:「PCの肥やし」とは、パソコンにインストールされているものの、ほとんど使われず、ストレージ容量を圧迫しているソフトウェアやアプリのこと