将变量写入所需文件的VBscript替代方案(FSO.write太慢)

将变量写入所需文件的VBscript替代方案(FSO.write太慢),vbscript,Vbscript,TL;DR:我需要一种比FSO.write更快的方式,或者另一种在不同脚本实例之间共享内存中变量的方式。 您好,我正在运行CCPulse(在Windows 7上),这是一个呼叫中心监控工具。代理被表示为“对象”,可以有各种统计信息(如通话次数、总通话时间等)。CCPulse允许对任何统计应用阈值和操作。这些基本上都是VBScript,据我所知,没有任何限制 这使我能够获取“阈值StatValue”并使用它进行操作(即将其写入文件)。问题是,如果我对所有代理的统计数据应用一个阈值,脚本将分别为每个

TL;DR:我需要一种比FSO.write更快的方式,或者另一种在不同脚本实例之间共享内存中变量的方式。

您好,我正在运行CCPulse(在Windows 7上),这是一个呼叫中心监控工具。代理被表示为“对象”,可以有各种统计信息(如通话次数、总通话时间等)。CCPulse允许对任何统计应用阈值和操作。这些基本上都是VBScript,据我所知,没有任何限制

这使我能够获取“阈值StatValue”并使用它进行操作(即将其写入文件)。问题是,如果我对所有代理的统计数据应用一个阈值,脚本将分别为每个代理对象执行(顺序执行,而不是并行执行)。但是,我想将所有代理统计数据导出到单个csv文件中

我已经让它工作了,如果它不存在,就创建一个文件,然后将open/ReadAll转换成一个字符串。如果代理尚未写入该文件,但其stat值会作为换行符追加到字符串中,如果该代理已存在于该文件中,我将使用正则表达式模式搜索并替换其行。然后,我将整个多行字符串写回文件:

Set objFile = objFSO.OpenTextFile(inFile,2)
objFile.Write strMemoryBuffer
objFile.Close 
set objFile = nothing
strMemoryBuffer包含文件的原始内容,包含新行或修改行。导出所有代理后,该字符串(以及随后的导出文件)的大小约为30kb。它看起来像这样(简化):

正如我所说的,由于脚本分别为每个代理运行,因此每次只添加/修改一行(CCpulse将一次执行一个对象的脚本,直到完成所有操作)

但是,写入过程非常缓慢,使用Timer()时,它表示需要0.10到0.15秒!这太慢了,因为我需要在近500个代理上运行脚本(理想的时间间隔不超过30秒),但所有的编写都需要一分钟(CCPulse将创建一个无法完成的阈值操作积压。我可以降低重新计算的频率,但这在其他方面是有害的)

如果我只注释掉上面的块,执行时间将显著减少到~0.02秒。因此,读取文件和操作字符串几乎不需要任何时间,只是写入过程很慢

我正在将文件本地写入硬盘驱动器(尽管没有SSD)。我不能使用RAM磁盘

我也曾尝试过向volatile环境写入数据,但不知何故,这会变得更慢(它确实可以工作,但由于某些原因,资源管理器进程变得疯狂,cpu使用率高达50%,ccpulse锁定,尽管导出文件仍在更新)


理想的解决方案是只在内存中重复操作字符串,然后每隔30秒或类似的时间写入文件一次,但我不知道如何使stremoryBuffer变量可供“next”代理使用。有什么想法吗

我刚才自己找到了解决办法。导出到volatile环境很慢,因为它存储在注册表中。但是,导出到process environment会产生所需的结果,而且速度非常快:
Set sh=CreateObject(“WScript.Shell”)Set env=sh.environment(“process”)
,然后,不再写入文件:`env(“stremorybuffer”)=stremorybuffer'请将您的解决方案作为答案而不是注释来编写。在StackOverflow上自行回答您的问题是完全可以接受的。
LoginID;Calls;TotalTalkTime
2243;08;9403
2132;12;8439