首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容纳大数的PowerShell变量类型

容纳大数的PowerShell变量类型
EN

Stack Overflow用户
提问于 2019-07-16 17:33:21
回答 3查看 760关注 0票数 3

我需要在PowerShell FOREACH循环中处理大量数字。我收到以下例外情况:

无法将值"60000000000“转换为键入"System.Int32”

代码语言:javascript
复制
[long]$LargeNumber = 60000000000
 foreach ($i in 1..$LargeNumber) {
  $i 
 }

我做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-16 18:05:16

似乎powershell的范围运算符(..)有一个限制,将输入参数限制为Int32。我找不到正式文件,但是根据这一页

2限制和警告只有两个关于范围使用的基本限制。第一个限制是范围内的数字必须在-2,147,483,648和2,147,483,647之间,包括在内;这一限制是因为PowerShell的range运算符将值更改为32位.NET整数,后者只能接受这些值。第二个限制是,单个范围不能包含超过50,001项。

票数 4
EN

Stack Overflow用户

发布于 2019-07-16 21:48:00

这似乎很管用。但我没等它结束。六百万的措施-命令花了29秒。

代码语言:javascript
复制
measure-command { for($i = 0; $i -le 6000000; $i++) { $i } }     
Seconds           : 29

大概3天就可以绕600亿圈?

代码语言:javascript
复制
$LargeNumber = 60000000000
for($i = 0; $i -le $largenumber; $i++) { $i }

使用范围运算符(450 gigs?)创建一个由8个字节整数组成的600亿个数组可能是不切实际的。观看Powershell的工作集内存高达259.61兆和160万。我差点把我的电脑撞坏了。我在一台带有ps 6的mac电脑上。

代码语言:javascript
复制
get-process pwsh

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00      77.98   3,212.20   39615 …02 pwsh

$a = 1..6000000

get-process pwsh

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     259.61   3,275.24   39615 …02 pwsh
票数 1
EN

Stack Overflow用户

发布于 2019-07-16 18:20:01

只是为了完成。我像下面这样调整代码以使其工作。

代码语言:javascript
复制
[long]$LargeNumber = 60000000000
[long]$i = 0 
while (1 -eq 1) { 
 $i 
 if ($i -gt $LargeNumber) {
  break 
 }
 $i++
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57062678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档