我正在将自定义结构体作为字典的键使用:
public struct TV
{
public int B;
public int BC;
public int P;
public int PO;
public int PC;
public int W;
public int WO;
public int WC;
public int R;
public int RO;
public int RC;
public int G;
public int GO;
public int GC;
public int GW;
public int GWO;
public int GWC;
public TV(int b, int bC, int p, int po, int pC, int w, int wo, int wC, int r, int ro, int rC, int g, int go, int gC, int gw, int gwo, int gwC)
{
B = b;
BC = bC;
P = p;
PO = po;
PC = pC;
W = w;
WO = wo;
WC = wC;
R = r;
RO = ro;
RC = rC;
G = g;
GO = go;
GC = gC;
GW = gw;
GWO = gwo;
GWC = gwC;
}
}
然而,由于我使用.containskey和getkey,每帧都会产生数百万次垃圾回收分配,这是一个问题。我已经研究了这个问题,我知道这与结构体的不正确装箱有关,因为没有实现IEquatable和一些方法的重写,如equals()和getHashCode。
我看到了一些实现的例子,但只找到了两个或三个变量的小结构体的例子,因为我的结构体有17个值,所以我不知道该如何实现它,也因为我不理解哈希码的工作原理,如果有人能指导我正确的方向,我将非常感激,我应该添加什么来使这个结构体可用作字典键?
int
值,那么将它们组合起来的标准哈希应该是可以的。但是,如果其中一些值具有较小的范围,您可以做得更好,甚至可能想出更好的结构。 - juharr