Я вложил проект LuaInterface в приложение, написанное на C#, используя .NET Framework 4.0. После компиляции LuaInterface и Lua 5.1 я ссылался на них в своем приложении и создал Lua VM и выставил несколько классов .NET. Когда Lua VM не делает много вызовов, производительность вообще не изменяется; но когда он начинает вызывать большее число функций .NET, все приложение становится медленным и не отвечает.Вложение LuaInterface в приложение C# имеет медленную производительность?
В ответ на это я сделал дополнительный поток для запуска Lua VM. По какой-то причине поток, на котором обновляется графический интерфейс, не обновляется, а Lua выполняет вызов функции, что приводит к заиканию в графическом интерфейсе. При перемещении окна вокруг вы можете ясно видеть, что он не отвечает на некоторое время, затем перемещается, не отвечает и т. Д.
Как решить эту проблему? У меня создалось впечатление, что дать Lua свою собственную нить, другую нить не следует влиять! Это в какой-то мере связано с моим собственным кодом? Есть ли у LuaInterface некоторые серьезные проблемы, связанные с функциями .NET (по производительности)? Что еще я мог использовать?
Может у нас есть некоторые примеры кода Windows Forms? –
Есть несколько 'if'. Загрузка системного процессора, сколько ядер у вас есть (только один?), Является ожиданием программы по результатам кода Lua, является кодом Lua, взаимодействующим с очередью сообщений основного приложения и т. Д. Сам вызов InterOp должен не блокировать другие потоки, кстати. (Тем не менее, для вызовов InterOp требуется, чтобы некоторые объекты GC были «исправлены» (не должны изменять местоположение памяти), поэтому в зависимости от типа использования его производительность GC может ухудшиться ... но _usually_ не в таких больших количествах – gimpf