Stockfish.js ( https://www.npmjs.com/package/stockfish )を使用してチェスの位置を分析する JavaScript (Node) を使用して Lichess ボットを作成しています。ボットは複数のゲームを同時にプレイできるため、各ゲームに Stockfish の独自のインスタンスを用意し、ゲームが終了したら割り当てを解除するのが理にかなっていると考えました。
ただし、メモリの割り当て解除には問題がありました。stop
およびUCI コマンドを送信した後でも、ゲームごとに最大 80MB のメモリ リークが発生し、またはquit
のようなアプローチも試みます。何も機能しません。this.worker = null
delete this.worker
コード スニペット:
- エンジンの初期化はコンストラクターで行われます。
constructor() {
this.worker = stockfish();
this.worker.onmessage = data => {
console.log(data);
};
this.worker.postMessage("uci");
}
- エンジンを停止します。
stop() {
this.worker.postMessage("stop");
this.worker.postMessage("quit");
setTimeout(() => {
this.worker = null;
console.log("Engine stopped");
}, 1500);
}
setTimeout()
テストするとき、this.worker = null
またはdelete this.worker
ステートメントが遅延していないときに前のステートメントに影響を与えるように見えるために使用します。私はまだこれを調査しています。
リークに関して私にできることはありますか?ありがとうございました。