none
PowerShellでブラウザと別なソフトを同時に立ち上げるとカクカク動くので解決したい RRS feed

  • 質問

  • はじめての投稿となります。よろしくお願いいたします。
    Powerscellを使って、まだ2ヶ月なんですが、下記の問題にぶつかり悩んでおります。

    PC起動時に2つのソフトを同時に立ち上げたいのですが、下記のスクリプトを書いたところ、両方ともカクカク動きます。

    Start-Sleep -Seconds 5
          start https://www.google.com
          start F:\TVstreaming\TVshow.exe 

    1つずつですと、問題なくスムーズに動くのですが、2つですとカクカクしてスムーズに動きません。

    高性能のグラフィックカード(GTX1060)を積んでいるノートPC(Windows10)でも試したのですが、やはり動きませんでした。*メインに使うPCはWindows7の64bit小型PCとなります。

    そこでネットで調べたところ、CPUのコアごとにソフトが割り当てられるような内容(ProcessorAffinityを使う)があったので、下記のスクリプトを試しました。

    Start-Sleep -Seconds 5
          start https://www.google.com
    Get-Process chrome | Select-Object ProcessorAffinity
    $Process = Get-Process chrome; $Process.ProcessorAffinity=1
          start F:\TVstreaming\TVshow.exe 
    Get-Process TVshow | Select-Object ProcessorAffinity
    $Process = Get-Process TVshow; $Process.ProcessorAffinity=2



    残念ながらスクリプトが間違っているのか、これでもスムーズに動きませんでした(というよりか全くコアごとに割り当てていないようです)。
    やはり、これですとうまく割り当てられていないのでしょうか?
    あるいは別な方法があるのでしょうか?
    初心者の質問で大変恐縮ですがよろしくお願いいたします。


    2019年2月18日 17:16

すべての返信

  • > PC起動時に2つのソフトを同時に立ち上げたいのですが、下記のスクリプトを書いたところ、両方ともカクカク動きます。

    スクリプトの起動にタスクスケジューラを用いていませんか?

    その場合、デフォルトでは親プロセス(powershell.exe)のみならず、スクリプトから起動したプロセスについても、プロセス優先度が「通常以下」に設定されてしまうため、処理が重くなることがあります。

    対処法としては、タスクをエクスポートして手動で優先度を書き換えてから再インポートする方法があります。

    参考:タスクスケジューラから起動されるプロセスの優先度を変更する | Like The Wind - Blog

    他の方法としては、以下のようにスクリプトから子プロセスの優先度を変更するのでも良いかも知れません。

    $Process = Get-Process chrome
    $Process.PriorityClass =[System.Diagnostics.ProcessPriorityClass]::Normal

    > そこでネットで調べたところ、CPUのコアごとにソフトが割り当てられるような内容(ProcessorAffinityを使う)があったので、下記のスクリプトを試しました。

    ProcessorAffinityは使用するコアの番号ではなく、使用する論理プロセッサをビットマスクで指定します。例えば論理プロセッサ数が8個の環境で、そのうち1~4と6の計5個を使いたい場合は、

    $Process.ProcessorAffinity =  [Convert]::ToInt32("00101111",2)

    のように指定します。



    2019年2月18日 19:30
    モデレータ
  • お世話になります。

    ご回答を頂き、誠にありがとうございました!
    早速試してみます!

    大変助かりました。

    2019年2月24日 16:43