Быстрая запись в JSON файл
Материал из GedeminWiki
Версия от 13:36, 14 февраля 2022; SYSDBA (обсуждение | вклад)
VBScript крайне медленно работает со строками. Если пытаться сформировать JSON файл склеивая кусочки строк, то это может занять целую вечность. Гораздо быстрее можно добиться нужного результата, если использовать потоки в памяти. Ниже приведен код экспорта справочника контактов и запись его на диск на который можно ориентироваться как на предел по скорости, которую можно выжать из VBScript.
10.5 сек, 52 053 записей, размер файла: 14 646 604 байт.
Option Explicit Sub Macros350407620_1817739749 Const fmCreate = &HFFFF& Const FileName = "c:\temp\test.json" Dim MS, FS, Creator, T, C T = WinAPI.GetTickCount C = 0 Set Creator = New TCreator Set MS = Creator.GetObject(nil, "TMemoryStream", "") Dim q Set q = Creator.GetObject(nil, "TIBSQL", "") Set q.Transaction = gdcBaseManager.ReadTransaction q.SQL.Text = "SELECT * FROM gd_contact" q.ExecQuery MS.WriteLn("[") While Not q.EOF MS.WriteLn(" {") MS.WriteLn(" ""id"": " + q.FieldByName("id").AsString + ",") MS.WriteLn(" ""name"": """ + Replace(q.FieldByName("name").AsString, """", "'") + """") MS.WriteLn(" ""phone"": """ + Replace(q.FieldByName("phone").AsString, """", "'") + """") MS.WriteLn(" ""fax"": """ + Replace(q.FieldByName("fax").AsString, """", "'") + """") MS.WriteLn(" ""zip"": """ + Replace(q.FieldByName("zip").AsString, """", "'") + """") MS.WriteLn(" ""country"": """ + Replace(q.FieldByName("country").AsString, """", "'") + """") MS.WriteLn(" ""district"": """ + Replace(q.FieldByName("district").AsString, """", "'") + """") MS.WriteLn(" ""city"": """ + Replace(q.FieldByName("city").AsString, """", "'") + """") MS.WriteLn(" ""address"": """ + Replace(q.FieldByName("address").AsString, """", "'") + """") MS.WriteLn(" }") C = C + 1 q.Next WEnd MS.WriteLn("]") Set FS = Creator.GetObject(Array(FileName, fmCreate), "TFileStream", "") Call System.WIN1251ToUTF8(MS, FS) MsgBox "Records: " & C & " Time: " & (WinAPI.GetTickCount - T) & "ms" End Sub