gpt4 book ai didi

.net - 将两个 Int32 组合成一个 Int64

转载 作者:行者123 更新时间:2023-12-01 07:09:04 27 4
gpt4 key购买 nike

有经常使用的 Dictionary 。我的意思是在大数据负载中运行数天的循环中。 Int64 来自两个 Int32。该字节恰好是许多非常长的列表中这两个 Int32 之间的距离(计数)。

在这个循环中我需要做的是

  • 生成 key
  • 如果字典中不存在键,则插入键和值
  • 如果键确实存在并且新值(字节)小于现有值,则将现有值替换为新值

  • 现在我正在使用直接数学来生成 key ,我知道有更快的方法,但我无法弄清楚。我把 shift 作为一个标签,因为我认为这是优化它的方法,但我无法弄清楚。

    然后当循环完成时我需要从 Int64 中提取两个 Int32 以将数据插入到数据库中。

    谢谢

    每个评论我用来将两个 Int32 组合成一个 Int64 的数学
            Int64 BigInt;
    Debug.WriteLine(Int32.MaxValue);
    Int32 IntA = 0;
    Int32 IntB = 1;
    BigInt = ((Int64)IntA * Int32.MaxValue) + IntB;
    Debug.WriteLine(BigInt.ToString());
    IntA = 1;
    IntB = 0;
    BigInt = ((Int64)IntA * Int32.MaxValue) + IntB;
    Debug.WriteLine(BigInt.ToString());
    IntA = 1;
    IntB = 1;
    BigInt = ((Int64)IntA * Int32.MaxValue) + IntB;
    Debug.WriteLine(BigInt.ToString());

    最好的 key 可能不是 Int64。我拥有的是两个 Int32,它们一起形成一个键。和一个字节的值。我需要对该复合键进行快速查找。字典很快,但它不支持复合键,所以我创建了一个实际上是复合键的键。在 SQL Int32A 中,Int32B 形成 PK。

    我不使用复合键的原因是我想要 Dictionary 的查找速度,据我所知,Dictionary 不支持复合键。这是生产代码。在 SQL 表中实际上有第三个键(Int32 sID、Int32 IntA、Int32 IntB)。在这个解析器中,我一次只处理一个 sID(并且 sID 是按顺序处理的)。我从对 SQL 的复合键查找开始(一次运行数十亿次)。当我将 IntA、IntB 拉出到 Dictionary 以处理单个 sID 然后在每个 sID 完成时加载到 SQL 时,我得到了 100:1 的性能改进。部分性能改进是插入,因为当我从字典中插入时,我可以按 PK 顺序插入。新的 IntA 和 IntB 不是按解析排序的,因此直接插入 SQL 会严重破坏索引,我需要在运行结束时重建索引。

    最佳答案

    如果您想从 Int32 来回转换为 Int64,您可以使用具有显式布局的结构:

    //using System.Runtime.InteropServices;
    [StructLayout(LayoutKind.Explicit)]
    struct Int64ToInt32
    {
    [FieldOffset(0)]
    public Int64 Int64Value;
    [FieldOffset(0)]
    public Int32 LeftInt32;
    [FieldOffset(4)]
    public Int32 RightInt32;
    }

    只需从字段中设置/获取值。

    关于.net - 将两个 Int32 组合成一个 Int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966649/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com