2010-10-13 67 views
3

我已将LuaInterface项目嵌入到使用.NET Framework 4.0以C#编写的应用程序中。在编译LuaInterface和Lua 5.1后,我在应用程序中引用了它们,并创建了一个Lua VM并公开了一些.NET类。当Lua VM不打很多电话时,性能完全不受影响;但是当它开始调用更多的.NET函数时,整个应用程序变得缓慢且无响应。在C#应用程序中嵌入LuaInterface的性能很慢?

作为回应,我做了一个额外的线程来运行Lua虚拟机。不过由于某些原因,GUI更新的线程在Lua执行函数调用时不会更新,导致GUI中出现口吃。当移动一个窗口时,您可以清楚地看到它不响应一会儿,然后移动,不响应等。

我该如何解决这个问题?我的印象是给Lua自己的线程,不应该影响另一个线程!这是否以某种方式纯粹与我自己的代码相关? LuaInterface有一些调用.NET函数的严重问题(性能方面)?我还能用什么?

+0

我们能有你的代码的一些例子吗? – 2010-10-21 01:55:01

+0

有几个'如果'。系统CPU负载,你有多少核心可用(只有一个?),程序是否等待Lua代码的结果,是与主应用程序的消息队列交互的Lua代码等.InterOp调用本身应该不阻止其他线程,顺便说一句。 (但是,进行InterOp调用需要某些GC对象“固定”(不能更改内存位置),因此根据其使用类型,GC性能可能会变差......但通常不会这么大 – gimpf 2011-02-22 14:44:13

回答

0

我没有尝试对.NET 4编译LuaInterface。到目前为止,我只使用了预编译的dll。我知道你可以通过设置为零来加速.NET 4中的混合图像程序集。根据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

+0

“我知道你可以通过将____设置为零来加速.NET 4中的混合图像程序集 - ”什么?不要让我挂!:-) – Cameron 2013-02-14 19:46:41