【发布时间】:2012-08-27 21:44:57
【问题描述】:
我不确定我是否做错了什么,但是当我在 .NET 框架中使用一些最简单的功能时,我发现 Windows 8 发生了重大变化。我的一台机器是带有 Visual Studio 2010 高级版的 Windows 7 X64,另一台是带有完全相同的 Visual Studio 的 Windows 8 X64。 Win7 / Win8 系统都是作为 MSDN 订阅者下载的,所以它们都是官方的。但是对于以下代码:
static void Main(string[] args)
{
byte[] dataBytes = new byte[256 * 256 * 4 + 256];
MemoryStream resultStream = new MemoryStream();
DeflateStream deflateStream = new DeflateStream(resultStream, CompressionMode.Compress);
deflateStream.Write(dataBytes, 0, dataBytes.Length);
Console.WriteLine(resultStream.Length);//2330
Bitmap a = new Bitmap(256, 256);
MemoryStream memoryStream1 = new MemoryStream();
a.Save(memoryStream1, ImageFormat.Png);
byte[] byteArray1 = memoryStream1.ToArray();
Console.WriteLine(byteArray1.Length);//1275
Console.Read();
}
它在 Window 7 上返回 2330/1275,但在 Windows 8 上返回 0/384。代码相同,都在 .NET Framework 4 Client Profile 下。
所以我做错了什么,或者这是 Windows 8 上的重大更改?
提前非常感谢。
感谢大家的帮助。对于第一种情况,我尝试了以下代码
byte[] dataBytes = new byte[256 * 256 * 4 + 256];
MemoryStream resultStream = new MemoryStream();
DeflateStream deflateStream = new DeflateStream(resultStream, CompressionMode.Compress);
deflateStream.Write(dataBytes, 0, dataBytes.Length);
deflateStream.Close();
Console.WriteLine(resultStream.ToArray().Length);
我在 Windows7 上得到 2338,在 Windows8 上得到 271。因此,Windows 8 似乎确实做了一些优化以使结果流更小。
【问题讨论】:
-
您需要在流上调用
Close以强制在压缩流上使用WriteFinal。 -
您的代码一直是错误的。看起来 Win8 以一种明显的方式暴露了这个错误,但它之前也存在。
-
你在 Win 7 上安装 .NET 4.5 吗? .NET 4.5 在 Win 7 上的结果是什么?和 Win 8 一样吗?
-
我没有在 Win7 上安装 .NET 4.5,所以无法尝试。谢谢你们的帮助,伙计们。
-
我想看看是.NET 4.5优化还是Win 8优化!
标签: .net visual-studio