diff --git a/src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs b/src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs index e74f2b0814..5ce069bee3 100644 --- a/src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs +++ b/src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs @@ -15,107 +15,6 @@ namespace Google.ProtocolBuffers.CompatTests where TMessage : IMessageLite where TBuilder : IBuilderLite; - #region RunBenchmark - - protected void RunBenchmark(byte[] buffer, bool write) - where TMessage : IMessageLite - where TBuilder : IBuilderLite, new() - { - TBuilder builder = new TBuilder(); - TMessage message = new TBuilder().MergeFrom(buffer).Build(); - System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); - //simple warm-up - object content = SerializeMessage(message); - Assert.AreEqual(message, DeerializeMessage(content, new TBuilder(), ExtensionRegistry.Empty).Build()); - //timming - long time = 0, sample = 1; - while (time < 100) - { - sample *= 10; - watch.Reset(); - watch.Start(); - if (write) - { - for (int i = 0; i < sample; i++) - SerializeMessage(message); - } - else - { - for (int i = 0; i < sample; i++) - DeerializeMessage(content, builder, ExtensionRegistry.Empty); - } - watch.Stop(); - time = watch.ElapsedMilliseconds; - } - - ulong rounds = (ulong)((100.0 / watch.ElapsedMilliseconds) * sample); - //test - watch.Reset(); - watch.Start(); - - if (write) - { - for (ulong i = 0; i < rounds; i++) - SerializeMessage(message); - } - else - { - for (ulong i = 0; i < rounds; i++) - DeerializeMessage(content, builder, ExtensionRegistry.Empty); - } - - watch.Stop(); - System.Diagnostics.Trace.TraceInformation( - "\r\n{0} {4} {5} {3:n0} rps ({1:n0} rounds in {2:n0} ms)", typeof(TMessage).Name, rounds, - watch.ElapsedMilliseconds, (1000.0 / watch.ElapsedMilliseconds) * (double)rounds, TestName, write ? " write" : " read"); - GC.GetTotalMemory(true); - GC.WaitForPendingFinalizers(); - } - - [Test] - public virtual void Message1OptimizeSizeWriterPerf() - { - RunBenchmark(TestResources.google_message1, true); - } - [Test] - public virtual void Message1OptimizeSpeedWriterPerf() - { - RunBenchmark(TestResources.google_message1, true); - } - [Test] - public virtual void Message2OptimizeSizeWriterPerf() - { - RunBenchmark(TestResources.google_message2, true); - } - [Test] - public virtual void Message2OptimizeSpeedWriterPerf() - { - RunBenchmark(TestResources.google_message2, true); - } - - [Test] - public virtual void Message1OptimizeSizeReadPerf() - { - RunBenchmark(TestResources.google_message1, false); - } - [Test] - public virtual void Message1OptimizeSpeedReadPerf() - { - RunBenchmark(TestResources.google_message1, false); - } - [Test] - public virtual void Message2OptimizeSizeReadPerf() - { - RunBenchmark(TestResources.google_message2, false); - } - [Test] - public virtual void Message2OptimizeSpeedReadPerf() - { - RunBenchmark(TestResources.google_message2, false); - } - - #endregion - [Test] public virtual void RoundTripMessage1OptimizeSize() { diff --git a/src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs b/src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs index 5eba0d3370..83f19ae323 100644 --- a/src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs +++ b/src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs @@ -22,17 +22,6 @@ namespace Google.ProtocolBuffers.CompatTests return builder; } - [Test, Explicit, Description("This test can take a very long time to run.")] - public override void Message2OptimizeSizeReadPerf() - { - base.Message2OptimizeSizeReadPerf(); - } - [Test, Explicit, Description("This test can take a very long time to run.")] - public override void Message2OptimizeSpeedReadPerf() - { - base.Message2OptimizeSpeedReadPerf(); - } - [Test, Explicit, Description("This test can take a very long time to run.")] public override void RoundTripMessage2OptimizeSize() { @@ -44,17 +33,5 @@ namespace Google.ProtocolBuffers.CompatTests { base.RoundTripMessage2OptimizeSpeed(); } - - [Test, Explicit, Description("This test can take a very long time to run.")] - public override void Message2OptimizeSizeWriterPerf() - { - base.Message2OptimizeSizeWriterPerf(); - } - [Test, Explicit, Description("This test can take a very long time to run.")] - public override void Message2OptimizeSpeedWriterPerf() - { - base.Message2OptimizeSpeedWriterPerf(); - } - } } \ No newline at end of file diff --git a/src/ProtocolBuffers/CodedInputStream.cs b/src/ProtocolBuffers/CodedInputStream.cs index 4f9bdc2346..105dc3781f 100644 --- a/src/ProtocolBuffers/CodedInputStream.cs +++ b/src/ProtocolBuffers/CodedInputStream.cs @@ -204,15 +204,22 @@ namespace Google.ProtocolBuffers public bool ReadDouble(ref double value) { #if SILVERLIGHT2 || COMPACT_FRAMEWORK_35 - byte[] rawBytes = ReadRawBytes(8); - if (!BitConverter.IsLittleEndian) - Array.Reverse(rawBytes); - value = BitConverter.ToDouble(rawBytes, 0); - return true; + if (BitConverter.IsLittleEndian && 8 <= bufferSize - bufferPos) + { + value = BitConverter.ToDouble(buffer, bufferPos); + bufferPos += 8; + } + else + { + byte[] rawBytes = ReadRawBytes(8); + if (!BitConverter.IsLittleEndian) + Array.Reverse(rawBytes); + value = BitConverter.ToDouble(rawBytes, 0); + } #else value = BitConverter.Int64BitsToDouble((long) ReadRawLittleEndian64()); - return true; #endif + return true; } /// @@ -220,10 +227,18 @@ namespace Google.ProtocolBuffers /// public bool ReadFloat(ref float value) { - byte[] rawBytes = ReadRawBytes(4); - if (!BitConverter.IsLittleEndian) - Array.Reverse(rawBytes); - value = BitConverter.ToSingle(rawBytes, 0); + if (BitConverter.IsLittleEndian && 4 <= bufferSize - bufferPos) + { + value = BitConverter.ToSingle(buffer, bufferPos); + bufferPos += 4; + } + else + { + byte[] rawBytes = ReadRawBytes(4); + if (!BitConverter.IsLittleEndian) + Array.Reverse(rawBytes); + value = BitConverter.ToSingle(rawBytes, 0); + } return true; }