Встраивание LuaInterface в приложение C # имеет низкую производительность? - PullRequest
3 голосов
/ 13 октября 2010

Я встроил проект LuaInterface в приложение, написанное на C # с использованием .NET Framework 4.0.После компиляции LuaInterface и Lua 5.1 я ссылался на них в своем приложении, создал виртуальную машину Lua и показал несколько классов .NET.Когда виртуальная машина Lua не выполняет много вызовов, производительность не изменяется вообще;но когда он начинает вызывать большее количество функций .NET, все приложение становится медленным и не отвечает.

В ответ на это я создал дополнительный поток для запуска виртуальной машины Lua.По какой-то причине поток, в котором обновляется GUI, не будет обновляться, пока Lua выполняет вызов функции, что приводит к заиканию в GUI.При перемещении окна вы можете ясно видеть, что оно некоторое время не отвечает, затем перемещается, не отвечает и т. Д.

Как я могу решить эту проблему?У меня сложилось впечатление, что предоставление Lua собственной нити не должно затрагивать другую нить!Это как-то связано с моим собственным кодом?Есть ли у LuaInterface серьезные проблемы с вызовом функций .NET (с точки зрения производительности)?Что еще я мог бы использовать?

1 Ответ

0 голосов
/ 22 февраля 2011

Я не пытался скомпилировать LuaInterface для .NET 4. До сих пор я использовал только предварительно скомпилированные dll. Я знаю, что вы можете ускорить сборку смешанных изображений в .NET 4, установив в ноль. Согласно MS: .NET Framework 4, оптимизированная архитектура взаимодействия взаимодействия обеспечивает значительное повышение производительности при переходе от управляемого кода к неуправляемому коду.

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

Держите нас в курсе, если вы найдете уловку, которая работает для вас. В Visual Studio 2010 вы можете на самом деле строить на .NET 2, поэтому на вашем месте я бы попытался создать фиктивное приложение и скомпилировать его для нескольких целей. Это может помочь вам количественно оценить снижение скорости при использовании .NET 4.

Если вы дадите нам какой-нибудь код, возможно, я мог бы немного поиграть с ним и выяснить, что не так. Я действительно заинтересован в LuaInterface и хочу выяснить, что не так.

Поскольку у меня нет примера кода, я просто размышляю об этом; но возможно, что проблема связана с тем, что ваш пользовательский интерфейс не является потокобезопасным. Довольно часто возникают проблемы с блокировкой, например, с элементами управления Windows Forms.

Как сделать потокобезопасные вызовы элементов управления Windows Forms http://msdn.microsoft.com/en-us/library/ms171728(v=vs.80).aspx

...