递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 4247|回复: 17
打印 上一主题 下一主题

[视窗] 发现文本到长整数 ()和文本到整数 ()有趣的问题

[复制链接]

50

主题

567

帖子

2473

积分

金牌会员

Rank: 6Rank: 6

积分
2473
跳转到指定楼层
楼主
发表于 2023-10-29 22:46:24 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

大家有没发现,文本到长整数 ()比文本到整数 ()执行效率还要高!!
以计次循环 (100000000)为例.转化为整数花费时间2700毫秒左右!
而转化为长整数花费时间0毫秒!(编译为发布版速度)目测,最少3000倍效率!这个StrToN64函数是吴总自创的算法吗?_ttoi函数也是自创的吗?当初为何不用StrToN64函数的返回值强转为int返回为整数.文本到整数 ()不就速度飞起来了?省时省脑!如下图:

回复

使用道具 举报

15

主题

128

帖子

999

积分

高级会员

Rank: 4

积分
999
18#
发表于 2023-11-1 17:08:39 | 只看该作者
文本到长整数 ()比文本到整数 ()执行效率还要高,那以后直接用文本到长整数 ()不就是快速了吗
回复

使用道具 举报

50

主题

567

帖子

2473

积分

金牌会员

Rank: 6Rank: 6

积分
2473
17#
 楼主| 发表于 2023-10-30 21:28:56 | 只看该作者
Xelloss0618 发表于 2023-10-30 20:44
谁教你这样测性能的……
应该是 (14359 - 11625) / 14359,快19%
排除多余的代码,只用文本到整数,关闭 ...

的确,好神奇,昨晚0毫秒.今晚要1秒完成转化
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
16#
发表于 2023-10-30 20:44:02 | 只看该作者
呵呵仙8 发表于 2023-10-30 18:18
我当初也认为是被编译优化了!

谁教你这样测性能的……
应该是 (14359 - 11625) / 14359,快19%
排除多余的代码,只用文本到整数,关闭编译优化我测出来是快 5 倍左右,默认编译优化是快 2~3 倍。
回复

使用道具 举报

50

主题

567

帖子

2473

积分

金牌会员

Rank: 6Rank: 6

积分
2473
15#
 楼主| 发表于 2023-10-30 18:18:22 | 只看该作者
Xelloss0618 发表于 2023-10-30 11:35
昨天发的回复还没放出来,这里简单给个结论,你的测试代码没考虑编译优化,实际性能差距是5倍左右 ...

我当初也认为是被编译优化了!





核心库命令,编译为发布版EXE,整体过程用时为14359毫秒!
改核心库命令,编译为发布版EXE,整体过程用时为11625毫秒!
那么,14359毫秒-11625毫秒=2734毫秒.就是这个改过的代码速度!因为前面的代码没变.
所以,不存在什么编译优化之说.它就这样的3000倍或更高的转化效率!!

<火山程序 类型 = "通常" 版本 = 1 />
如果 (来源对象 == 按钮1)
{
    变量 JB_测速 <类型 = 类_测速>
    变量 JB_文本型 <类型 = 文本型>
    变量 JB_整数 <类型 = 整数>
    变量 a <类型 = 整数>
    JB_测速._测速开始 ()
    计次循环 (100000000)
    {
        a = a + 1
        如果真 (a == 2147483647)
        {
            a = 0


        }
        JB_文本型 = 到文本 (a)
        JB_整数 = _文本到整数 (JB_文本型)


    }
    调试输出 ("JB_整数:", JB_整数)
    标签1.标题 = JB_测速._测速结束 () + ":" + 到文本 (JB_整数)
}




<火山程序 类型 = "通常" 版本 = 1 />


方法 _文本到整数 <公开 静态 类型 = 整数 注释 = "将所指定文本转换到整数并返回" 折叠 @嵌入式方法 = "">
参数 所欲转换的文本 <类型 = 文本型>
{
    @ (int)StrToN64 (@<所欲转换的文本>.GetText ())
}




回复

使用道具 举报

50

主题

567

帖子

2473

积分

金牌会员

Rank: 6Rank: 6

积分
2473
14#
 楼主| 发表于 2023-10-30 16:58:15 | 只看该作者
Xelloss0618 发表于 2023-10-30 15:35
直接强转是不准确的,你可以测试一下这个代码。
调试输出 (文本到长整数 ("5000000000"), 文本到整数 ("5 ...

我试过,如果文本是整数范围内的文本,不存在错误返回的!
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
13#
发表于 2023-10-30 15:35:46 | 只看该作者
呵呵仙8 发表于 2023-10-30 12:19
会错意了.后图是个人建议"文本到整数()"源码变更为这样.速度才和"文本到长整数()"一样快!! ...

直接强转是不准确的,你可以测试一下这个代码。
调试输出 (文本到长整数 ("5000000000"), 文本到整数 ("5000000000"), (整数)文本到长整数 ("5000000000"))

_ttoi 这个C函数比吴总的 StrToN64 只慢2到6倍左右。
回复

使用道具 举报

15

主题

299

帖子

2025

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2025
12#
发表于 2023-10-30 14:49:55 | 只看该作者
编译了看看C++代码是怎么写的?
回复

使用道具 举报

7

主题

130

帖子

1013

积分

金牌会员

Rank: 6Rank: 6

积分
1013
11#
发表于 2023-10-30 13:22:54 来自手机 | 只看该作者
这么细节的地方都被你发现了,牛逼
回复

使用道具 举报

50

主题

567

帖子

2473

积分

金牌会员

Rank: 6Rank: 6

积分
2473
10#
 楼主| 发表于 2023-10-30 12:19:03 | 只看该作者
suyan 发表于 2023-10-30 09:14
占用时间应该是那个强转INT带来的

会错意了.后图是个人建议"文本到整数()"源码变更为这样.速度才和"文本到长整数()"一样快!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 05:44 , Processed in 0.102078 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表