Autohotkey 有没有办法将大型(1650万个条目)数据结构作为对象快速导入?

Autohotkey 有没有办法将大型(1650万个条目)数据结构作为对象快速导入?,autohotkey,Autohotkey,我意识到我可能会突破像AHK这样的脚本语言的限制,但我认为应该可以相对快速地将1650万个条目的数据结构导入到一个对象中。我的意思是我试图导入的JSON文件只有250MB,游戏会很快加载这种大小的文件,对吗 我正在尝试使用导入这个250MB JSON文件,需要15分钟。我意识到JSON可能不是为大数据加载而设计的,但如何才能更快地导入数据 我对任何形式或方法都持开放态度 这是我目前的代码,其中一些被注释掉了,这是用于生成和导出对象的代码: #MaxMem 512 FileDelete, Log.

我意识到我可能会突破像AHK这样的脚本语言的限制,但我认为应该可以相对快速地将1650万个条目的数据结构导入到一个对象中。我的意思是我试图导入的JSON文件只有250MB,游戏会很快加载这种大小的文件,对吗

我正在尝试使用导入这个250MB JSON文件,需要15分钟。我意识到JSON可能不是为大数据加载而设计的,但如何才能更快地导入数据

我对任何形式或方法都持开放态度

这是我目前的代码,其中一些被注释掉了,这是用于生成和导出对象的代码:

#MaxMem 512
FileDelete, Log.txt

getTimestamp()
{
    DllCall("QueryPerformanceCounter", "Int64*", timestamp)
    DllCall("QueryPerformanceFrequency", "Int64*", frequency)
    return Round(timestamp * 1000 / frequency)
}

splitRGBColor(RGBColor, ByRef red, ByRef green, ByRef blue)
{
    red := RGBColor >> 16 & 0xFF
    green := RGBColor >> 8 & 0xFF
    blue := RGBColor & 0xFF
}

joinRGBColor(red, green, blue)
{
    SetFormat Integer, H
    red += 0
    green += 0
    blue += 0
    SetFormat Integer, D
    StringTrimLeft, red, red, 2
    StringTrimLeft, green, green, 2
    StringTrimLeft, blue, blue, 2
    redLength := StrLen(red)
    greenlength := StrLen(green)
    blueLength := StrLen(blue)
    if (redLength < 2) {
        red = 0%red%
    }
    if (greenLength < 2) {
        green = 0%green%
    }
    if (blueLength < 2) {
        blue = 0%blue%
    }
    hex := "0xff" . red . green . blue
    return hex
}

roundHexColor(color1ARGB, colorChunkSize){
    ;FileAppend, % "Hex: " . color1ARGB . "`n", Log.txt
    splitRGBColor(color1ARGB, red, green, blue)
    ;FileAppend, % "Red: " . red . " Green: " . green . " Blue: " . blue . "`n", Log.txt

    red := Round(red / colorChunkSize) * colorChunkSize
    green := Round(green / colorChunkSize) * colorChunkSize
    blue := Round(blue / colorChunkSize) * colorChunkSize

    color1ARGB := joinRGBColor(red, green, blue)
    ;FileAppend, % "Rounded hex: " . color1ARGB . "`n", Log.txt
    return color1ARGB
}

;condensedColors := {}

;loop, 255
;{
;   r := A_index
;   loop, 255
;   {
;       g := A_index
;       loop, 255
;       {
;           b := A_index
;           rgbHexRaw := joinRGBColor(r, g, b)
;           rgbHexRouded := roundHexColor(rgbHexRaw, 5)
;           condensedColors[rgbHexRaw] := rgbHexRounded
;       }
;   }
;}

;colorsJSON := JSON.Dump(condensedColors)
;FileDelete, condensedColors.json
;FileAppend, % colorsJSON, condensedColors.json

FileRead, condensedColorsJSON, condensedColors.json
condensedColors := JSON.Load(condensedColorsJSON)

testColor := 0xff3f975c

FileAppend, % "Test: " . testColor . " is rounded to " . condensedColors[testColor] . ".`n", Log.txt

runCounter := 160000
start := getTimestamp()
loop, %runCounter%
{
    roundedColor := condensedColors[0xff3f975c]
}
end := getTimestamp()
duration := end - start
average := duration / runCounter

FileAppend, % "We rounded " . runCounter . " colors in " . duration . "ms, or " . average . "ms per rounded color value.`n", Log.txt
#MaxMem 512
FileDelete,Log.txt
getTimestamp()
{
DllCall(“QueryPerformanceCounter”,“Int64*”,时间戳)
DllCall(“QueryPerformanceFrequency”,“Int64*”,frequency)
回程(时间戳*1000/次)
}
拆分RGB颜色(RGB颜色、ByRef红色、ByRef绿色、ByRef蓝色)
{
红色:=RGBColor>>16&0xFF
绿色:=RGBColor>>8&0xFF
蓝色:=RGBColor&0xFF
}
JoinRGB颜色(红色、绿色、蓝色)
{
SetFormat Integer,H
红色+=0
绿色+=0
蓝色+=0
SetFormat Integer,D
左,红色,红色,2
左,绿色,绿色,2
左边,蓝色,蓝色,2
redLength:=StrLen(红色)
greenlength:=StrLen(绿色)
blueLength:=StrLen(蓝色)
如果(红色长度<2){
红色=0%红色%
}
如果(绿色长度<2){
绿色=0%绿色%
}
如果(蓝色长度<2){
蓝色=0%蓝色%
}
十六进制:=“0xff”。红色。绿色。蓝色
返回十六进制
}
roundHexColor(color1ARGB、colorChunkSize){
FileAppend,%十六进制:“.color1ARGB.”n“,Log.txt
拆分RGB颜色(颜色1 RGB、红色、绿色、蓝色)
FileAppend,%红色:.Red。绿色:.Green。蓝色:.Blue。n,Log.txt
红色:=圆形(红色/colorChunkSize)*colorChunkSize
绿色:=圆形(绿色/colorChunkSize)*colorChunkSize
蓝色:=圆形(蓝色/colorChunkSize)*colorChunkSize
color1ARGB:=JoinRGB颜色(红色、绿色、蓝色)
FileAppend,%四舍五入十六进制:“.color1ARGB.”n“,Log.txt
返回颜色1argb
}
;浓缩颜色:={}
;环路,255
;{
;r:=A_指数
;循环,255
;   {
;g:=A_指数
;循环,255
;       {
;b:=A_指数
;rgbHexRaw:=joinrgb颜色(r、g、b)
;rgbHexRouded:=roundHexColor(rgbHexRaw,5)
;浓缩颜色[rgbHexRaw]:=RGBHEXROUND
;       }
;   }
;}
;colorsJSON:=JSON.Dump(压缩颜色)
;FileDelete,concentedcolors.json
;FileAppend,%colorsJSON,concurtedcolors.json
FileRead,concuratedcolorsjson,concuratedcolors.json
conclatedcolors:=JSON.Load(conclatedcolorsjson)
testColor:=0xff3f975c
FileAppend,%测试:“。testColor。“四舍五入至”。浓缩颜色[testColor]。“`n”,Log.txt
运行计数器:=160000
开始:=getTimestamp()
循环,%runCounter%
{
圆形颜色:=浓缩颜色[0xff3f975c]
}
结束:=getTimestamp()
持续时间:=结束-开始
平均值:=持续时间/运行计数器
FileAppend,%%“我们四舍五入”。运行计数器。“颜色在”。期间“ms,或”。一般。“每四舍五入颜色值ms.`n”,Log.txt

您必须对文件进行预解析或将其切成块,然后以线程的形式进行处理

你可以用一个定制的软件来实现这一点。Java使线程和解析JSON变得简单。如果你想让它真的很快,就用C写吧


如果你想要一个纯粹的基于浏览器的解决方案,你必须滚动一个新的数据库和预处理插入。

Oops我刚才说的6.5,16.5是正确的。编辑。正如您所看到的,如果您查看代码,它是一个包含所有RGB颜色的字典,其中包含与之相关的颜色的圆形版本。这用于实时简化图像200 x 200部分的颜色空间。获得
roundedColor:=colors[hexcode]
比每次执行计算要快得多,这涉及到实时图像识别,因此速度是必要的。