問題タブ [clearscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
603 参照

clearscript - ClearScript: オブジェクト値を取得する方法

どちらかを実行できるClearScriptがあります

また

C# で配列の値を取得するにはどうすればよいですか?

そして、いずれかのケースを取得するために、try/catch を実行する選択肢はありませんよね?

0 投票する
1 に答える
601 参照

c# - スレッド内での ClearScript の使用

複数のスレッドを生成する C# アプリケーションがあります。私は .NET フレームワーク 4.7.1 を使用しています。これらのスレッド内で作業が実行され、この作業によってユーザー定義のスクリプト関数が実行される場合があります。私は ClearScript をスクリプト エンジンとして使用しており、この質問では VBScriptEngine を使用しています。私の問題を示すサンプルアプリケーションは次のとおりです。

Evaluate()関数で、次のエラーが発生します: System.InvalidOperationException: '別のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。

ClearScript がスレッド アフィニティを実装しており、生成されたスレッドがグローバルに定義されたエンジンにアクセスできないことを理解しています。それで、私の代替手段は何ですか?新しいスレッドごとに ClearScript の新しいインスタンスを作成しますか? これは非常に無駄に思え、多くのオーバーヘッドが発生します。私のアプリケーションは何千ものスレッドを処理する必要があります。私は先に進み、とにかくこのアプローチを試しました-そして、それが機能している間(しばらくの間)-最終的にエラーが発生します。サンプル アプリの改訂版は次のとおりです。

新しい VBScriptEngine()呼び出しで、System.ComponentModel.Win32Exception : 'このコマンドを処理するのに十分なストレージがありません' というメッセージが表示されるようになりました。

アプリケーションが多くの RAM を占有していないため、このメッセージの原因はよくわかりません。

このサンプル アプリケーションはすべてのスレッドを一度に開始していることに気付きましたが、完全なアプリケーションでは 4 つのスレッドしか実行されておらず、しばらくするとこのメッセージが表示されます。理由はわかりませんが、アプリと Visual Studio を再起動した後でも、このメッセージを取り除くことはできません。このメッセージの原因を少し明確にすることは役に立ちます。

私の質問は、一度に 4 つのスレッドを実行するだけでよい場合、VBScriptEngine の 4 つのインスタンスを作成して、新しいスレッド呼び出しごとに再利用する方法はありますか? それとも、メイン スレッドに VBScriptEngine のインスタンスを 1 つだけ配置し、新しいスレッドごとにそれを共有するだけですか?