Skip to content

Instantly share code, notes, and snippets.

@mntone
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mntone/775bc9a0c933dd316744 to your computer and use it in GitHub Desktop.
Save mntone/775bc9a0c933dd316744 to your computer and use it in GitHub Desktop.
C# の Stream 変換検証
#include "pch.h"
#include "Class1.h"
using namespace Concurrency;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Storage::Streams;
using namespace StreamTestFactory;
IBuffer^ Class1::GetBuffer()
{
return ref new Buffer( 1024 * 1024 );
}
IAsyncOperation<IInputStream^>^ Class1::GetInputStreamAsync()
{
return create_async( []
{
auto buffer = ref new Buffer( 1024 * 1024 );
auto ms = ref new InMemoryRandomAccessStream();
return create_task( ms->WriteAsync( buffer ) ).then( [ms]( uint32 length )
{
return ms->GetInputStreamAt( 0 );
} );
} );
}
#pragma once
namespace StreamTestFactory
{
public ref class Class1 sealed
{
public:
static Windows::Storage::Streams::IBuffer^ GetBuffer();
static Windows::Foundation::IAsyncOperation<Windows::Storage::Streams::IInputStream^>^ GetInputStreamAsync();
};
}
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace StreamTest
{
public sealed partial class MainPage: Page
{
public MainPage()
{
this.InitializeComponent();
}
private async void Page_Loaded( object sender, RoutedEventArgs e )
{
var c = 100000000;
var ary = new byte[1024 * 1024];
var stream = new MemoryStream( 1024 * 1024 );
stream.Write( ary, 0, ary.Length );
var inputStream = stream.AsInputStream();
var buffer = stream.GetWindowsRuntimeBuffer();
var start = DateTimeOffset.Now;
for( var i = 0; i < c; ++i )
{
inputStream.AsStreamForRead();
}
var end = DateTimeOffset.Now;
var offset = end - start;
var start2 = DateTimeOffset.Now;
for( var i = 0; i < c; ++i )
{
buffer.AsStream();
}
var end2 = DateTimeOffset.Now;
var offset2 = end2 - start2;
var inputStreamPP = await StreamTestFactory.Class1.GetInputStreamAsync();
var start3 = DateTimeOffset.Now;
for( var i = 0; i < c; ++i )
{
inputStreamPP.AsStreamForRead();
}
var end3 = DateTimeOffset.Now;
var offset3 = end3 - start3;
var bufferPP = StreamTestFactory.Class1.GetBuffer();
var start4 = DateTimeOffset.Now;
for( var i = 0; i < c; ++i )
{
bufferPP.AsStream();
}
var end4 = DateTimeOffset.Now;
var offset4 = end4 - start4;
Debug.WriteLine( "{0}, {1}, {2}, {3}", offset, offset2, offset3, offset4 );
}
}
}
+ offset {00:00:00.8987264} System.TimeSpan
+ offset2 {00:00:05.8384010} System.TimeSpan
+ offset3 {00:00:06.6026362} System.TimeSpan
+ offset4 {00:00:58.0481722} System.TimeSpan
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment