何か問題があったかどうかはわかりませんが、.NET フレームワークの最も単純な機能を使用しているときに、Windows 8 に重大な変更があることがわかりました。私のマシンの 1 つは Visual Studio 2010 プレミアムを搭載した Windows 7 X64 で、もう 1 つはまったく同じ 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();
}
Windows 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 は結果ストリームを小さくするためにいくつかの最適化を行っているようです。