c# BigInteger和int如何节省内存
本文关键字:何节省 内存 int BigInteger | 更新日期: 2023-09-27 18:14:00
我正在测试一个矩阵,如果它在每一行都有一个素数。
MR意味着它应该使用Miller Rabin算法。如果它为假,它只是尝试除数直到根号(n)凡索为真,如果它在每一个被检查的行中都找到了一个素数;凡索为真,如果它在实际检查的行中找到了一个素数。
我的问题是:是否有可能通过不创建int和BigInteger值来节省内存,只有当tryParse为真?我是说像
这样的东西if (int.tryParse(akt, out new int szam))
这样的事情可能吗?(BigInteger不带符号时占用多少内存?)
akt = Console.ReadLine();
int szam; BigInteger szambig;
if (int.TryParse(akt, out szam))
{
if (MR) {
if (MilRab(szam))
{ vansor = true; vanoszlop = true; } }
else if (Prim(szam))
{ vansor = true; vanoszlop = true; }
}
else if (BigInteger.TryParse(akt, out szambig))
{
if (MR) {
if (MilRab(szam))
{ vansor = true; vanoszlop = true; } }
else if (Prim(szam))
{ vansor = true; vanoszlop = true; }
}
我不是100%确定。net IL如何优化内存,但一般来说,局部"值"类型(与"引用"类型相反)保留在堆栈上。在IE中,如果不实例化整数,则只能节省~4字节,并且仅用于该调用的生命周期。一旦退出函数,堆栈将被清空。
结构是"值"类型,也放在堆栈上。它们为所有其他值类型保留内存&根据需要引用指针。无论Signed为真还是假,BigInteger的大小都是一样的。
我想我真正的问题是:为什么记忆困扰?在您的代码示例中,您将占用几十字节的内存,当方法退出时,这些内存将全部被释放。
如果您设法做到这一点,最多可以节省BigInteger
在64位模式下占用的16个字节(我猜)。
我很确定那不值得担心。在这16个字节很重要的情况下:
- 你可能不应该使用。net
- 你很可能没有。net可用