c#中指针的速度优化
using System;
using System.Collections.Generic;
using System.Text;
namespace MATRIX
{
class MatrixX
{
private double[,] m1 = new double[,] { { 1, 2, 3, 4 }, { 2.5, 5, 7, 90 }, { 45, 3.2, 2.5, 320.1 }, { 4587.2, 6542.8, 236.015, 523.57 } };
private double[,] m2 = new double[4, 4] { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
static void Main(string[] args)
{
MatrixX mx= new MatrixX();
DateTime start = DateTime.Now;
mx.MatrixXXpointer();
DateTime end = DateTime.Now;
TimeSpan ts = end - start;
Console.WriteLine(ts.TotalMilliseconds);
Console.Read();
}
public void MatrixXX()
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
double x = 0;
for (int k = 0; k < 4; k++)
{
x = x + m1[i, k] * m1[k, j];
}
m2[i, j] = x;
}
}
public unsafe void MatrixXXpointer()
{
double*[] S = new double*[4];
double*[] t = new double*[4];
for (int i = 0; i < 4; i++)
{
double* pt = stackalloc double[4];
double* pt1 = stackalloc double[4];
S[i] = pt;
t[i] = pt1;
}
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
*(S[i] + j) = m1[i, j];
}
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
double x = 0.0;
for (int k = 0; k < 4; k++)
{
x = x + *(S[i] + k) * *(S[k] + j);
}
*(t[i]+ j) = x;
}
}
}
}
浙公网安备 33010602011771号