static void Main(string[] args) { Demo1 d1 = new Demo1(); d1.Test(); Demo2 d2 = new Demo2(); //d2.Test(); d2.Test3(); GC.Collect(); Demo3 d3 = new Demo3(); d3.Test(); Demo4 d4 = new Demo4(); d4.Test(); Demo5 d5 = new Demo5(); d5.Test(); d5.Test2(); d5.Test3(); Demo6 d6 = new Demo6(); d6.Test(); Console.ReadLine(); }
public void Test3() { // matrix ByVal const int DIM = 5; int[,] matrix = new int[DIM, DIM]; Console.WriteLine("\n\nMatrix before call:"); for (int i = 0; i < DIM; i++) { for (int j = 0; j < DIM; j++) { matrix[i, j] = j; Console.Write(" " + matrix[i, j]); } Console.WriteLine(""); } int sum3 = Demo5.TestMatrixOfInts(matrix, DIM); Console.WriteLine("\nSum of elements:" + sum3); Console.WriteLine("\nMatrix after call:"); for (int i = 0; i < DIM; i++) { for (int j = 0; j < DIM; j++) { Console.Write(" " + matrix[i, j]); } Console.WriteLine(""); } }
static void Main(string[] args) { TestOne(); //获取系统时间函数 Demo1 d1 = new Demo1(); d1.Test(); //托管内存和非托管内存之间的创建和拷贝 Demo2 d2 = new Demo2(); //d2.Test(); d2.Test3(); GC.Collect(); //创建非托管程序中指针的对应托管指针,从而为后续访问非托管对象提供方便。 Demo3 d3 = new Demo3(); d3.Test(); //回调函数的示例 Demo4 d4 = new Demo4(); d4.Test(); Demo5 d5 = new Demo5(); d5.Test(); d5.Test2(); d5.Test3(); //字符串数组 Demo6 d6 = new Demo6(); d6.Test(); Console.ReadLine(); }
public void Test2() { int[] array2 = new int[10]; int size = array2.Length; Console.WriteLine("\n\nInteger array passed ByRef before call:"); for (int i = 0; i < array2.Length; i++) { array2[i] = i; Console.Write(" " + array2[i]); } //两种非托管内存申请方式,对于简单的字节内存,可以使用Marshal.AllocHGlobal,对于创建复杂类的内存,采用类似Demo5.NewArray方式。 //IntPtr buffer = Demo5.NewArray(10); IntPtr buffer = Marshal.AllocHGlobal(10); Marshal.Copy(array2, 0, buffer, 10); int sum2 = Demo5.TestRefArrayOfInts(ref buffer, ref size); Console.WriteLine("\nInteger array passed ByRef after call:"); Console.WriteLine("\nSum of elements:" + sum2); if (size > 0) { int[] arrayRes = new int[size]; //从非托管拷贝到托管内存。 Marshal.Copy(buffer, arrayRes, 0, size); foreach (int i in arrayRes) { Console.Write(" " + i); } } else { Console.WriteLine("\nArray after call is empty"); } //Demo5.DeleteArray(buffer); Marshal.FreeHGlobal(buffer); }
public void Test() { int[] array1 = new int[10]; Console.WriteLine("Integer array passed ByVal before call:"); for (int i = 0; i < array1.Length; i++) { array1[i] = i; Console.Write(" " + array1[i]); } int count = 10000; while (count > 0) { count--; int sum1 = Demo5.TestArrayOfInts(array1, array1.Length); } Console.WriteLine("\nInteger array passed ByVal after call:"); foreach (int i in array1) { Console.Write(" " + i); } }