【问题标题】:Embedding LuaInterface in a C# application has slow performance?在 C# 应用程序中嵌入 LuaInterface 性能很慢?
【发布时间】:2011-04-24 16:47:50
【问题描述】:

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

为此,我创建了一个额外的线程来运行 Lua VM。但是由于某种原因,在 Lua 执行函数调用时,更新 GUI 的线程不会更新,从而导致 GUI 卡顿。四处移动窗口时,您可以清楚地看到它一会没有响应,然后移动,没有响应等。

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

【问题讨论】:

  • 我们可以提供一些您的代码示例吗?
  • 有几个ifs。系统 CPU 负载,您有多少个内核可用(只有一个?),程序是否在等待 Lua 代码的结果,Lua 代码是否与主应用程序的消息队列交互,等等。InterOp 调用本身应该顺便说一句,不要阻塞其他线程。 (但是,进行 InterOp 调用需要“固定”一些 GC 对象(不得更改内存位置),因此根据使用它的类型,GC 性能可能会变差......但通常 i> 数量不多。

标签: c# .net lua luainterface


【解决方案1】:

我没有尝试针对 .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

【讨论】:

  • “我知道您可以通过将____设置为零来加速 .NET 4 中的混合图像程序集”——什么?别让我上吊! :-)
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2015-09-30
  • 2017-09-13
  • 1970-01-01
相关资源
最近更新 更多