当前位置: 首页 > wzjs >正文

枞阳县建设局网站百度一下官网网址

枞阳县建设局网站,百度一下官网网址,网页设计如何设计导航栏,德阳网站建设网站引言 在NLua开发中,我们常面临一个重要选择:将C#函数注册到Lua环境调用,还是直接在Lua中实现逻辑? 直觉告诉我们,C#作为编译型语言性能更高,但跨语言调用的开销是否会影响整体性能?本文通过基准…

引言

在NLua开发中,我们常面临一个重要选择:将C#函数注册到Lua环境调用,还是直接在Lua中实现逻辑? 直觉告诉我们,C#作为编译型语言性能更高,但跨语言调用的开销是否会影响整体性能?本文通过基准测试揭示真相。


测试场景

实现安全索引访问函数At,对比三种实现方式:

  1. NativeLuaAt:纯Lua实现
  2. CSharpRegisterAt:C#实现并注册到Lua
  3. NativeCSharpAt:纯C#直接调用

测试环境:

  • .NET Framework 4.8.1
  • Intel Core i7-1260P
  • BenchmarkDotNet v0.15.0

性能数据对比

方法平均耗时内存分配
NativeLuaAt6,844 ns288 B
CSharpRegisterAt9,585 ns552 B
NativeCSharpAt106 ns32 B

在这里插入图片描述


结论

出乎意料,直接在Lua中实现逻辑会更快,这里原因可能是将C#函数注册到Lua环境调用涉及到上下文切换等耗时动作。
相关代码见NLuaBenchmarkDotNetTest

代码

Lua代码

--[[
仅用于userdata索引访问函数,C#定义
参数:tbl  : 目标Lua表(数组形式)index: 索引值(支持正负索引)strict: [可选]严格模式,默认false,设为true时额外校验元素连续性
返回值:对应索引位置的元素
异常:类型错误或索引越界时抛出错误
--]]
function At(tbl, index)-- 参数校验阶段 -- 检查第一个参数是否为tableif type(tbl) ~= "userdata" thenerror("bad argument #1 (expected table, got "..type(tbl)..")", 2)end-- 检查索引是否为整数if type(index) ~= "number" or math.floor(index) ~= index thenerror("index must be integer, got "..type(index), 2)end-- 长度计算策略 local len = tbl.Length-- 严格模式下验证表连续性-- 索引转换逻辑 local adjusted_index-- 处理正索引(userdata是 的0-based)if index >= 0 thenadjusted_index = index -- 处理负索引(从末尾倒数)elseadjusted_index = len + index end-- 边界检查与错误处理 -- 有效索引范围:1 ≤ index ≤ lenif adjusted_index < 0 or adjusted_index >= len thenlocal direction = index >=0 and "positive" or "negative"error(string.format("Index %d (%s) out of range [%d, %d]", index, direction, -len, len-1), 2)end-- 最终元素获取 return tbl[adjusted_index]
end

C#代码

        /// <summary>/// 安全索引访问器(支持Lua数组的0-based索引规则)/// </summary>/// <param name="collection">目标集合(支持IList接口的集合)</param>/// <param name="index">索引值(支持负索引倒查)</param>/// <param name="strict">严格模式校验元素连续性</param>/// <returns>索引位置的元素</returns>/// <exception cref="ArgumentNullException">输入集合为空</exception>/// <exception cref="ArgumentException">集合类型不合法或索引无效</exception>public static object At(IEnumerable collection, int index, bool strict = false){// 参数基础校验if (collection == null)throw new ArgumentNullException(nameof(collection), "输入集合不能为null");// 类型安全转换IList list = collection as IList;if (list == null)throw new ArgumentException("输入集合必须实现IList接口", nameof(collection));// 获取有效长度int count = list.Count;if (count == 0)throw new ArgumentException("集合中不包含有效元素", nameof(collection));// 索引转换逻辑int adjustedIndex = index >= 0 ? index : count + index;// 边界校验if (adjustedIndex < 0 || adjustedIndex >= count){string msg = $"索引 {index} 超出有效范围 [{-count}, {count - 1}]";throw new ArgumentOutOfRangeException(nameof(index), msg);}// 严格模式校验if (strict){// 校验是否存在null元素for (int i = 0; i < count; i++){if (list[i] == null){throw new ArgumentException($"严格模式检测到空元素 @ 位置 {i}");}}}return ConvertToDouble(list[adjustedIndex]);}
http://www.dtcms.com/wzjs/206734.html

相关文章:

  • thinkphp做网站教程深圳网络推广优化
  • ubuntu怎么做网站少儿编程培训机构排名前十
  • 做网站要用服务器维护产品品牌策划方案
  • 阿里云商标注册入口seo算法入门教程
  • 一级a做爰片免费网站 新闻万能推广app
  • p2p网站开发多少钱seo运营经理
  • 做维修广告在哪个网站百度竞价托管公司
  • 域名注册平台哪个好淘宝seo推广优化
  • 淡水网站建设定制谷歌应用商店
  • 做一个网站的建设流程seo网络推广是干嘛的
  • 云南公司网站制作淘宝直通车
  • 镇江市网站建设设计热搜榜百度一下你就知道
  • 西安网站制作网站网络营销推广
  • 钟祥网站建设做个网页价格多少
  • 网站运营软件磁力bt种子搜索
  • 山东济宁疫情最新消息封城专业黑帽seo
  • 上海十大网站建设电商seo搜索引擎优化
  • 有没有接做网站私活的平台网站怎样才能在百度被搜索到
  • 建设网站东莞公司免费外链生成器
  • 网络培训的网站建设软文网
  • 深圳企业网站哪家强跟我学seo
  • 建设微信网站的流程图qq营销软件
  • 常德网站公司海淀seo搜索引擎优化公司
  • 宝安网站制作免费推广的方式有哪些
  • 虚拟机做的网站怎么让外网访问不了网谷歌浏览器下载手机版官网中文
  • 金融行业网站建设发文章用哪个平台比较好
  • 如何在百度上为企业做网站外链发布平台有哪些
  • 网站页面做多宽网站seo需要用到哪些工具
  • 网站怎么添加导航栏宁波seo排名外包公司
  • 靖江网站赣州seo外包怎么收费