powershell中使用超大内存对象

简单介绍了powershell中超大内存对象的用途,开启powershell超大内存对象的办法。

powershell 传教士 原创文章 2016-12-31 允许转载,但必须保留名字和出处,否则追究法律责任

powershell 2GB large object .net 大对象

前 言

问:powershell中,哪些对象有可能会占用大内存?

答: stringbuilder对象,大数组arraylist,hashset等。

问:powershell中,stringbuildr对象有什么用?

答: 还是比较常用的,让大文件在内存中查找替换,这样比string快不少。

问:1GB的stringbuilder对象,能存多少文本?

答: .net 采用utf16,即不论一个英文字母还是一个汉字,都占用2个字节。 所以说1GB的文本文件,读取入内存后,大概要占用2.1GB左右的内存。

正 文

问题的提出: 一个变量占用1GB内存,算是大么?

我有台测试机子,用的是win10 ltsb 2016的系统,物理内存还剩30G,虚拟内存20G。 但是建立个1GB的对象都报错。而建立900MB的就不报错了,代码如下:

[System.Reflection.Assembly]::loadwithpartialname("System.Text") | Out-Null
[int32]$long = 1gb
$内存字符串对象 = New-Object System.Text.StringBuilder($long)

本来手册中说,默认能使用2GB内存的。唉,这年头啥都缩水呀,看来我只能启用.net的超大对象了。

前提:

1 用64位系统,物理内存足够,虚拟内存足够。

2 .net版本至少是4.51,当然最好是最新版4.62。

3具体解决办法:

用记事本,新建一个文本文件,

文件名为:【powershell.exe.config】

文件编码为:【utf8+bom头】,即用记事本保存成utf8编码。

文件内容为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <gcAllowVeryLargeObjects enabled="true" />
    </runtime>
</configuration>

保存后,粘贴此文件到【c:\Windows\System32\WindowsPowerShell\v1.0】

再重新运行powershell.exe,重新运行上述脚本代码,就不报错了。

时间: 2024-12-03 06:37:57

powershell中使用超大内存对象的相关文章

java中基本类型封装对象所占内存的大小(转)

这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runtime类中有一些简单的能涉及到内存管理的函数: Every Java application has a single instance of class Runtime that allows the application to interface with the environment in

对象处理方法, 首先内存中要要有对象原形 才可以返回对象

struct op( name = "ccc") coc = #( cc = op name: 20 , op name: "name" ) --- 保存数组配置 o = gt_max_namespace.gt_cl_hp_fileiooutin(); o. setfile "c://t.txt" coc ccc= o.getfile "c://t.txt" --#("(op name:20)", &quo

在LAMP架构中安装Memcached高性能内存对象缓存应用(内含所有源码包)

初识memcached: Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的hash表,所以支持任意存储类型的数据.很多网站通过使用memcached提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站. Memcached是典型的C/S结构,因此需要安装memcached服务端和memcached API客户端.Memcached服务端是用C语言编写的,而memcached API客户端可以用任何语言来编写,如PHP

(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项. 和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励

使用管道符在PowerShell中进行各种数据操作

最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下. 无论是在Linux中写Bash脚本还是在Window上写PowerShell,管道符”|“是一个非常有用的工具.它提供了将前一个命令的输出作为下一个命令的输入的功能.在数据处理中,我们也可以使用管道符对数据进行各种操作. Import&Export导入导出 先说导入导出是为了能够为接下来的数据处理准备数据.在PowerShell中我们也可以通过各种Ge

powershell读写磁盘变量(对象序列化)

---[第一章,开篇引子]--- 很久很久以前,我在网上闲逛,看到一头powershell菜鸟,写了一篇感慨道“挖哈哈,我学会powershell啦,我以前很笨,各种不懂,还想把变量保存起来.” 实际上我想说这并不算笨. 大多数变量,是我们需要处理的数据.但凡变量,都是我们需要用到的.都是在内存中的. 数据处理完成之后,99%都不需要了. 但是还有那么1%变量是我们下次还想再用的,这些个变量我们就需要保存起来. 比如游戏数据存盘,软件配置. powershell 传教士 原创文章 2014-07

JAVA中堆栈和内存分配

(一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.)3. 堆:存放所有new出来的对象.4. 静态域(属于方法区) :存放静态成员(static定义的)5. 常量池 (属于方法区):存放字符串常量和基本类型常量(public static final).6. 非RAM存储:硬盘等永久存储空间这里我们主要关心栈

【Java面试题】52 java中会存在内存泄漏吗,请简单描述。

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉.由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的. package com.huawei.interview; import java.io.IOException; public class Garbage

java中的堆内存和栈内存

Java把内存分成两种: 一种叫做栈内存 一种叫做堆内存 栈内存 : 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存 : 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着