64位平台.NET Framework數組限制不能超過2GB大小。這種限制對於需要使用到大型矩陣和向量計算的工作人員來說,是一個非常大問題。
無論RAM容量有多大有多少,一旦你使用大型矩陣和向量計算工作的時候,經常會拋出一個System.OutOfMemoryException異常,如下圖所示:
參考程序
class Program { private static void Main(string[] args) { int arrysize = 150000000; var large=new decimal[arrysize]; Console.ReadLine(); } }
值得慶幸的是。NET Framework 4.5引入了一個配置屬性在運行時模式,使陣列總大小大於2 GB 64位應用程序。
您只需要啟用gcAllowVeryLargeObjects元素控制.NET garbage-collection system(垃圾收集系統)的行為就可以了。
參考模板
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <runtime> <gcAllowVeryLargeObjects enabled="true" /> </runtime> </configuration>
可以看下結果沒有拋出異常,可以正常的運行,如下
這種方式,可以更好地利用可用的內存使用巨大的數組時在64位平台上。
你可以把這個設置與garbage-collection system(垃圾回收系統)結合改進。但是.NET Framework 4.5與.NET Framework 4.0數組的元素的最大數量仍然一樣。