using System;
using System.Diagnostics ;
using System.Linq ;
namespace MemoryPerformance
{
class Program
{
static void Main( string[ ] args)
{
const int count = 100000000 ;
int [ ] intArray = Enumerable.Range ( 0 , count) .ToArray ( ) ;
long [ ] longArray = intArray.Select ( x => ( long ) x) .ToArray ( ) ;
for ( int i = 0 ; i < 4 ; i++ ) {
Measure( ( ) => intSum( intArray) , " int sum" ) ;
Measure( ( ) => longSum( longArray) , "long sum" ) ;
}
}
static long intSum( int [ ] array)
{
long sum = 0 ;
for ( int i = 0 ; i < array.Length ; i += 8 ) sum += array[ i] ;
return sum;
}
static long longSum( long [ ] array)
{
long sum = 0 ;
for ( int i = 0 ; i < array.Length ; i += 8 ) sum += array[ i] ;
return sum;
}
static void Measure( Func< long> action, string description)
{
Stopwatch stopwatch = new Stopwatch( ) ;
stopwatch.Start ( ) ;
long result = action( ) ;
stopwatch.Stop ( ) ;
Console.WriteLine ( $"{description} took {stopwatch.ElapsedMilliseconds} ms ({result})" ) ;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5MaW5xOwoKbmFtZXNwYWNlIE1lbW9yeVBlcmZvcm1hbmNlCnsKICAgIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgICAgICBjb25zdCBpbnQgY291bnQgPSAxMDAwMDAwMDA7CiAgICAgICAgICAgIGludFtdIGludEFycmF5ID0gRW51bWVyYWJsZS5SYW5nZSgwLCBjb3VudCkuVG9BcnJheSgpOwogICAgICAgICAgICBsb25nW10gbG9uZ0FycmF5ID0gaW50QXJyYXkuU2VsZWN0KHggPT4gKGxvbmcpeCkuVG9BcnJheSgpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICAgICAgICAgTWVhc3VyZSgoKSA9PiBpbnRTdW0oaW50QXJyYXkpLCAiIGludCBzdW0iKTsKICAgICAgICAgICAgICAgIE1lYXN1cmUoKCkgPT4gbG9uZ1N1bShsb25nQXJyYXkpLCAibG9uZyBzdW0iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGxvbmcgaW50U3VtKGludFtdIGFycmF5KQogICAgICAgIHsKICAgICAgICAgICAgbG9uZyBzdW0gPSAwOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lkxlbmd0aDsgaSArPSA4KSBzdW0gKz0gYXJyYXlbaV07CiAgICAgICAgICAgIHJldHVybiBzdW07CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgbG9uZyBsb25nU3VtKGxvbmdbXSBhcnJheSkKICAgICAgICB7CiAgICAgICAgICAgIGxvbmcgc3VtID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5MZW5ndGg7IGkgKz0gOCkgc3VtICs9IGFycmF5W2ldOwogICAgICAgICAgICByZXR1cm4gc3VtOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQgTWVhc3VyZShGdW5jPGxvbmc+IGFjdGlvbiwgc3RyaW5nIGRlc2NyaXB0aW9uKQogICAgICAgIHsKICAgICAgICAgICAgU3RvcHdhdGNoIHN0b3B3YXRjaCA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICAgICAgc3RvcHdhdGNoLlN0YXJ0KCk7CiAgICAgICAgICAgIGxvbmcgcmVzdWx0ID0gYWN0aW9uKCk7CiAgICAgICAgICAgIHN0b3B3YXRjaC5TdG9wKCk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQie2Rlc2NyaXB0aW9ufSB0b29rIHtzdG9wd2F0Y2guRWxhcHNlZE1pbGxpc2Vjb25kc30gbXMgKHtyZXN1bHR9KSIpOwogICAgICAgIH0KICAgIH0KfQ==