3

.NET Framework 4.0を使用してC#で記述されたアプリケーションにLuaInterfaceプロジェクトを埋め込みました。LuaInterfaceとLua5.1をコンパイルした後、アプリケーションでそれらを参照し、Lua VMを作成して、いくつかの.NETクラスを公開しました。Lua VMが多くの呼び出しを行わない場合、パフォーマンスはまったく影響を受けません。ただし、多数の.NET関数を呼び出し始めると、アプリケーション全体が遅くなり、応答しなくなります。

これに対応して、LuaVMを実行するための追加のスレッドを作成しました。ただし、何らかの理由で、Luaが関数呼び出しを実行している間、GUIが更新されるスレッドは更新されないため、GUIが途切れます。ウィンドウを移動すると、しばらく応答しない、次に移動する、応答しないなどのことがはっきりとわかります。

この問題を解決するにはどうすればよいですか?Luaに独自のスレッドを与えれば、別のスレッドは影響を受けないはずだという印象を受けました。これは純粋に私自身のコードに何らかの形で関連していますか?LuaInterfaceには、.NET関数の呼び出し(パフォーマンスに関して)にいくつかの重大な問題がありますか?他に何を使用できますか?

4

1 に答える 1

0

LuaInterfaceを.NET4に対してコンパイルしようとはしませんでした。これまでは、プリコンパイルされたdllのみを使用していました。をゼロに設定することで、.NET4の混合イメージアセンブリを高速化できることを知っています。MS:.NET Framework 4によると、合理化された相互運用マーシャリングアーキテクチャにより、マネージコードからアンマネージコードへの移行のパフォーマンスが大幅に向上します。

http://msdn.microsoft.com/en-us/library/ff361650.aspx

あなたがあなたのために働くトリックを見つけた場合に備えて、私たちを最新の状態に保ってください。Visual Studio 2010では、実際に.NET 2に対してビルドできるため、私があなたである場合は、ダミーアプリを作成し、複数のターゲットに対してコンパイルしようとします。.NET 4を使用している場合、速度の低下を定量化するのに役立つ場合があります。

あなたが私たちにいくつかのコードを与えれば、多分私はそれで少し遊んで、何が悪いのかを理解することができます。私はLuaInterfaceに本当に興味があり、何が悪いのかを理解することに熱心です。

私はコードサンプルを持っていないので、これについて推測しているだけです。ただし、問題はUIがスレッドセーフではないことに関連している可能性があります。たとえば、Windowsフォームコントロールでロックの問題が発生することはよくあることです。

方法:Windowsフォームコントロールへのスレッドセーフな呼び出しを行う http://msdn.microsoft.com/en-us/library/ms171728(v=vs.80).aspx

于 2011-02-22T14:30:09.557 に答える