将 LuaInterface 嵌入 C#应用程序会导致性能缓慢?

我已经将LuaInterface项目嵌入到使用.NET Framework 4.0编写的C#应用程序中。在编译LuaInterface和Lua 5.1之后,我将它们引用到我的应用程序中,并创建了一个Lua VM并暴露了一些.NET类。当Lua VM不进行太多调用时,性能不会受到任何影响;但当它开始调用大量.NET函数时,整个应用程序变得缓慢和不响应。

为了解决这个问题,我另外开了一个线程来运行Lua VM。但出于某种原因,GUI更新的线程在Lua执行函数调用时不会更新,导致GUI出现卡顿。当移动窗口时,您可以清楚地看到它在一小段时间内没有响应,然后移动,没有响应,等等。

我该如何解决这个问题?我认为让Lua有自己的线程,不应该影响其他线程!这纯粹与我的代码有关吗?LuaInterface在调用.NET函数方面是否存在严重问题(在性能方面)?我还能使用什么?

原文链接 https://stackoverflow.com/questions/3921424

点赞
stackoverflow用户621390
stackoverflow用户621390

我没有尝试将 LuaInterface 编译为 .NET 4。到目前为止,我只使用了预编译的dll文件。我知道你可以通过将“mixed image assemblies”设置为零,在.NET 4中加快速度。根据微软的说法:.NET Framework 4中,流线型的互操作封送结构提供了从托管代码到非托管代码的转换的显着性能提升。

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

如果你发现一个适合你的技巧,请让我们知道最新情况。在Visual Studio 2010中,您实际上可以构建 .NET 2,因此如果我是你,我会尝试创建一个虚拟程序,并将其编译为多个目标。这可能会有助于您量化使用 .NET 4 时的速度降低。

如果您提供一些代码,也许我可以稍微研究一下并找出问题所在。我非常感兴趣 LuaInterface ,并渴望找出问题所在。

由于我没有代码样例,因此我只是在推测;但是与您的UI不是线程安全有关的问题可能很常见。例如,常常会出现与Windows Forms控件相关的锁定问题。

如何:使对Windows Forms控件的调用是线程安全的 http://msdn.microsoft.com/en-us/library/ms171728(v=vs.80).aspx

2011-02-22 14:30:09