using System;
using System.Threading;
using System.Threading.Tasks;
namespace ServerCore
{
/// <summary>
/// 캐시작동 테스트
/// </summary>
class Program
{
static void Main(string[] args)
{
int[,] arr = new int[10000, 10000];
///수학적으로는 분명 같은 시간이 걸릴것이다...
///하지만 실제로는? 엄청난 차이가 난다
///space와 관련이 있다
///
///5*5배열이라고 가정
///[][][][][] [][][][][] [][][][][] [][][][][] [][][][][]
///
///첫번째 코드는 x부터 바꾸기 때문에
///[0][1][2][3][4] 이런식으로 차근차근 접근함
///캐시는 공간법칙때문에 [0][][][][] 에서 여기 또 접근할 것이라고 생각함
///그래서 캐시에 [0][][][][]을 가지고 있음
/// 다음 접근이 [0][1][][][] 1 부분이니까 캐시히트라서 램에 다시 갈필요없이 연산함(캐시값 업데이트) 상대적으로 빠르다
///
///두번째는 [0][][][][] [1][][][][] [2][][][][]
///이런식으로 되서 캐시의 공간적 이점을 살릴수 없다..
/// [0][][][][]을 캐시에 넣어둿지만 다음이 [1][][][][] 이기 때문에
/// 속도가 느리다
{
long now = DateTime.Now.Ticks;
for (int y = 0; y < 10000; y++)
for (int x = 0; x < 10000; x++)
arr[y, x] = 1;
long end= DateTime.Now.Ticks;
Console.WriteLine($"(y,x) 순서 걸린 시간{end-now}");
}
{
long now = DateTime.Now.Ticks;
for (int y = 0; y < 10000; y++)
for (int x = 0; x < 10000; x++)
arr[x, y] = 1;
long end = DateTime.Now.Ticks;
Console.WriteLine($"(x,y) 순서 걸린 시간{end - now}");
}
}
}
}
댓글 없음:
댓글 쓰기