powershell中使用超大內存對象


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM