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,重新運行上述腳本代碼,就不報錯了。