vb.net - 在文本中高效地存储 GUID?

标签 vb.net guid

我们的应用程序要求我们写出大量 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 Testing 100-10mill

如果您想尝试,我在下面提供了我使用的代码。我知道它并不完美,但可以让您了解时间流逝的方向。主要结论是通过批量追加来追加文件,如果可以的话,不要尝试单独追加每个 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/

相关文章:

string - SSIS:从字符串变量中过滤多个 GUID 作为数据流 OLE 源中的参数

c++ - C++ 中的 GUID 常量(在特定的 Orwell Dev-C++ 中)

c# - 将 byte[] 或对象转换为 GUID

windows - 任何我不应该在我的Visual C++程序中添加GUID验证的原因?

vb.net - 如何通过 Visual Basic 控制台应用程序登录网页

vb.net - 透明列表框或列表框

vb.net - 出现错误 'type parameters cannot be used as qualifiers'

javascript - Knockout js 数据绑定(bind)属性未重定向正确的页面

entity-framework - 在服务器端 Entity Framework 5上生成Guid?

python - 单击按钮在 VB.net 中运行 python 脚本