日期:2014-05-18  浏览次数:21005 次

请问怎么在C#里面动态申请内存空间用于存储中间数据呢?
我现在需要处理一组很大的数据,在数据的处理过程中需要申请一些临时的内存来存储这些数据,而C语言可以用malloc()函数来申请这些内存空间:
double *temp_r,*temp_a,*temp_i;

temp_r=(double *)malloc(Column*sizeof(double));

temp_a=(double *)malloc(Row*Column*sizeof(double));

temp_i=(double *)malloc(Column*sizeof(double));
  ...........
  free(temp_r);
  free(temp_i);
return temp_a;
请问在C#里面怎么来动态申请内存空间,用于存储运算过程的中间数据,并在最后释放这些空间呢?

------解决方案--------------------
new关键字:
double[] data = new double[100000];
List<double> data = new List<double>(); 后者可以适应动态变化长度的数据。

内存本身是CLR管理的,不需要你释放。
------解决方案--------------------
如果对象实现了Idisponse接口,可以用using关键字自动释放资源。

如果对象很大,先new出来对象,用完了赋值为null,然后GC.Collect手工清理一下垃圾。
------解决方案--------------------
正解,C#要比C高级,底层的事情不用你操心
探讨

new关键字:
double[] data = new double[100000];
List<double> data = new List<double>(); 后者可以适应动态变化长度的数据。

内存本身是CLR管理的,不需要你释放。

------解决方案--------------------
c#不需要自己管理内存,动态内存可以使用List来存放,自动在不够的时候扩容,管理起来很方便,这是C#比C++等早期语言的优势之处,当然,正因为如此,C#中使用指针将非常不变,因为内存不是自己管理了,自然要用指针访问别人管理的内存是不可以的,要通过特殊方法将内存地址固定,功能上还限制很多。