我们的应用程序要求我们写出大量 key, GUID
value 对以导出到纯文本文件。
6004, aa20dc0b-1e10-4efa-b683-fc98820b0fba
这些 GUID 可能有数百万个,并且在写入文件的设备上可能没有太多空间,那么有没有更有效的方法来打印 GUID 以减小文件大小?
我尝试了十六进制编码
Dim g As Guid = Guid.NewGuid
Dim sb As New Text.StringBuilder
For Each b As Byte In g.ToByteArray
sb.Append(String.Format("{0:X2}", b))
Next
Console.WriteLine(sb.ToString)
这让它减少到 32 个字符,每一行都短了一点:
9870, EBB7EF914C29A6459A34EDCB61EB8C8F
是否有任何其他方法可以更有效地将 GUID 写入文件?
最佳答案
我同意之前的评论,SQL 是理想的(或另一个数据库)文本文件可能非常不稳定。刚刚对数百万个 GUID 进行了一些快速测试并存储在文本文件中。
这是结果,基本上任何超过 100 万个 guid 都会开始引起问题。您可以安全地存储 1000 万,但该文件将难以打开(在普通 PC 上),因为它大于 150mb,如下所示:
如果您想尝试,我在下面提供了我使用的代码。我知道它并不完美,但可以让您了解时间流逝的方向。主要结论是通过批量追加来追加文件,如果可以的话,不要尝试单独追加每个 GUID。这节省了大量的处理和时间!
即使您转换为其他格式,如 base 或二进制,我认为您仍然会在文件大小上得到类似的变化,不要忘记,您仍然只是保存为文本文件,二进制文件无疑会更大文件大小取决于字符串长度!
如果您有任何需要,希望这有助于回复!
鸡肉
Dim Report_List As List(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Report_List = New List(Of String)
Dim Zeros As Integer = 2
Do While Zeros < 8
Dim sw As Stopwatch = New Stopwatch
sw.Start()
Dim CountName As String = "1" & Microsoft.VisualBasic.Left("00000000000000000000000", Zeros)
Dim CountNum As Integer = CInt(CountName)
Dim Master_String As System.Text.StringBuilder = New System.Text.StringBuilder
For i = 1 To CountNum
Dim g As Guid = Guid.NewGuid
'Dim sb As New System.Text.StringBuilder
'For Each b As Byte In g.ToByteArray
' sb.Append(String.Format("{0:X2}", b))
'Next
'Master_String.AppendLine(sb.ToString)
'Master_String.AppendLine(sb.ToString)
Master_String.AppendLine(Convert.ToBase64String(g.ToByteArray))
i += 1
Next
Using sr As StreamWriter = New StreamWriter("c:\temp\test-" & CountName & ".txt", False)
sr.Write(Master_String.ToString)
End Using
sw.Stop()
Report_List.Add(sw.Elapsed.ToString & " - " & CountName)
Zeros += 1
Loop
For Each lr In Report_List
Me.ListBox1.Items.Add(lr)
Next
End Sub
关于vb.net - 在文本中高效地存储 GUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727709/