.Net 跨平台可移植类库PCL可用于任何平台包括Mono
Microsoft 在 .NET Framework 4 中添加了一个名为可移植类库 (PCL) 的新功能。 利用 PCL,您可以有选择性地面向 .NET Framework、Silverlight 和 Windows Phone 以及 Windows 应用商店和 Xbox 360 的多个版本,所有这些均可从单个 Visual Studio .NET 项目中实现。 当您选择 PCL 项目模板时,Visual Studio 会自动确保代码仅使用每个所选目标平台上存在的库。 这样就无需使用繁重的预处理器指令和多个生成目标。 另一方面,该功能对可从库调用哪些 API 设定了一些限制;有关 PCL 功能和用法的详细信息,请参见“使用 .NET Framework 实现跨平台开发” (msdn.microsoft.com/library/gg597391)。
微软.NET团队的项目经理Rich Lander在.NET团队博客上发了一篇博客Portable Class Library (PCL) now available on all platforms :
Mono老大Miguel de Icaza 也在博客上发了一篇博客 Microsoft’s PCL Reference Assemblies, Mono 从Mono 3.0.12 支持可移植类库,对于.NET程序员来说是个好消息,可以看出微软是在实实在在的支持.NET的跨平台。
Codeplex上有个项目 Sharing Code in .NET using Portable Class Library 是PCL使用方面的代码Sample,社区现在已经有非常的项目支持PCL。具体可以看我转载Scott Hanselman的一篇文章 .Net 跨平台可移植类库正在进行。
c#中关于大对象数组的一些心得
在之前的一个课题中,曾经需要用到2W行*3W列的float类型矩阵(大约2.4G),由于无法创建大于2G的对象,当时采用了一些取巧的办法回避了,并没有拿出精力来研究一下这个问题。今天和公司的张哥(大牛级人物)重新谈到了这个话题,在他的一些指引下感觉收获颇深,发博记录一下。
首先,大家应该知道.net4.5以前,C#是无法创建内存大于2G的对象的。而且经测试,这仅仅是对64位平台的限制,在32位平台上,大约对象在1.47G左右的时候就会报异常了。至于其为什么这样设计,大家可以参考博文:
http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx 。
而在.net4.5以后,我们就可以通过修改配置的办法来创建大对象,(.net4.5的一些新特性:http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx)具体操作如下图:
经过这样的配置后,对象的大小将不再受2G的限制(有没有上限没测出来,也没找到相关资料)。然而对于.net4.5以前的版本这么做就无能为力了。针对这个问题,我们可以用交错数组进行解决。其形式为float[][](普通数组为float[,]),通过交错数组我们可以很容易创建大于2G的对象,具体创建方式如下:
float[][] f=new float[20000][];
for (int i = 0; i < 20000; i++)
{
f[i] = new float[500000000]; //5亿个float大约2G的内存。
}
此类数组在内存中具体的存储方式还不得而知(感觉不会像普通数组一样是一整块连续的内存),其理论上最大应该可以扩充到20亿*2个G的字节。