Visual_Basic 板


LINE

※ 引述《Daira (Daira)》之铭言: : 因为最近写的程式会需要建立一个庞大的字串阵列做排序及读写 : 举列来说 Dim S(n) As String,n 可能大於 10 ^ 5 : 因此想了解 VB6 对字串阵列的实做方式,以及如何能加速并节省记忆体 : 以 C 的观点来看,每一个字串都是一个 Char Array : 因此如果要在 C 中建立字串阵列,可以直接开一个二维 Char Array : 但缺点是每一个字串的长度必须固定,当字串长度差异很大时,很多记忆体是浪费的 : 不然就是开一个 Char Pointer Array,然後另外动态配置记忆体给每一个字串 : 这样虽然记忆体省下了,但每次变动字串就必须重新配置记忆体长度 : 尤其是在排序时,字串会有大量的变动(这里假设不能直接交换 Pointer) : 不知道 VB6 的字串阵列是哪一种做法(我这里指的是 VB 的动态长度字串) : 如果是方法一,那是不是在字串变动时,等於整个阵列都要重新配置记忆体 : 又如果遇到这种情形,有没有什麽方法可以做到速度和空间的最佳化 不知道你要的是哪一种? 固定字串: '长度 = n Dim S As String * 3 '长度固定为 3 S = "12" '会自动填上一个空白(强制) S = "123" S = "1234" '4 会被截掉 变动字串: '0 <= 长度 <= 2147483648 Dim S As String '长度为 0 S = "12" '长度为 2 S = "123" '长度为 3 S = "1234" '长度为 4 字串阵列: 'n + 1 <= 长度 <= 2147483648 * (n + 1) Dim S(3) As String '长度为 0 * (3 + 1) = 0 S(0) = "Visual Basic" '目前长度为 12 + (0 * 3) = 12 S(1) = "Visual C++" '目前长度为 12 + 10 + (0 * 2) = 22 S(2) = "VS.NET" '目前长度为 12 + 10 + 6 + 0 = 28 S(3) = "Quick Basic" '目前长度为 12 + 10 + 6 + 11 = 39 Redim Preserve S(5) '目前长度为 12 + 10 + 6 + 11 + 0 + 0 = 39 S(4) = "Real Basic" '目前长度为 12 + 10 + 6 + 11 + 10 + 0 = 49 Redim S(20) '目前长度为 0 * (20 + 1) = 0 (内容被清空) 字元阵列: '长度 = n + 1 Dim b() As Byte '不可指定长度,目前长度为0 b = "长江一号" '目前长度为8 b = "要你命3000" '目前长度为10 Debug.Print b '输出:「要你命3000」 ReDim b(3) As Byte '目前长度为 3 + 1 = 4 b(0) = 209 b(1) = 158 b(2) = 65 Debug.Print b '输出:「黑A」 b = "十字追魂棍 " '目前长度为11 (後面有个空白) 像 memcpy 那种东西,对应的是 CopyMemory,但是不太会用。 字元阵列好像不能用 CopyMemory? 我不确定,我试不出来就对了。 使用方法: Dim S As String s = Space(20) CopyMemory ByVal StrPtr(s) + 10, ByVal StrPtr("黑龙江"), 6 Debug.Print s 输出:「 黑龙江 」 ※ 自己在一般模组加上这行: Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) -- VB 程式设计 仓木麻衣 PTT 星爷板 行列输入法 ====================================================== Visual_Basic MaiKuraki Stephen Array --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.155.162
1F:推 Daira:感谢板主这麽细心的回答 ~^^~ 140.112.30.95 06/17







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP