如何用C# 编写数据处理程序,请高手指教!

时间:2023-02-22 09:55:11
写数据处理程序,我通常用vc 实现: 先打开要处理的原始数据文件(一般都是500M左右),分配一块大约2M左右的动态内存,然后将文件按照一次读取2M,将文件内容存放到已经分配好的2M内存中,再对该2M内中的数据进行处理,然后将结果数据落盘。就这样程序按照每次处理2M的速度将文件处理完毕。
我想问的是用c#如何实现?
1.用vc编写一个dll 文件然后由c#调用。--这个方法我知道
2.用c#编写不安全代码段?在c#中可以分配动态内存吗?
3.建一个2M的数组?用2M的数组代替vc中2M的动态内存?
4.用流读取文件,然后对流进行处理?

请有经验的各位高手谈谈你的经验和看法好吗?我上述的4个实现方法哪个是可行的,效果及优缺点各是什么?您还有没有其他更好的方法,能实现我的要求,即用C# 编写数据处理程序(我是做通信研究的经常需要编写程序实现数据处理,如给数据加扰码、Rs码等等)

8 个解决方案

#1


既然用 c#, .net 为何不用内存数据库系统 (DataSet, DataTable)?
要造*?

#2


lz想多了。

只要不涉及指针,就不存在不安全的问题。

至于动态分配内存,在托管环境下,就是动态产生对象。

int[] data = new int[10000];
People[] p = new People();
...

这些都是动态生成。至于内存分配的细节,CLR已经帮你搞定了。

#3


3楼caozhy所说的证实了我讲的第3种方法是可行的,谢谢你的回答。
大家都说说 自己的看法好吗?我说的第1种和第3种方法哪个更好,优缺点是什么?第4种方法能否实现我的要求,具体如何去实现?还有其他的方法吗

#4


引用 2 楼 caozhy 的回复:
lz想多了。

只要不涉及指针,就不存在不安全的问题。

至于动态分配内存,在托管环境下,就是动态产生对象。

int[] data = new int[10000];
People[] p = new People();
...

这些都是动态生成。至于内存分配的细节,CLR已经帮你搞定了。

caozhy所说的证实了我讲的第3种方法是可行的,谢谢你的回答。
大家都说说 自己的看法好吗?我说的第1种和第3种方法哪个更好,优缺点是什么?第4种方法能否实现我的要求,具体如何去实现?还有其他的方法吗

#5


流和你说的办法不矛盾啊。它不是一个方法,是一个步骤。

用流把数据读取进来。

#6


引用 1 楼 dobzhansky 的回复:
既然用 c#, .net 为何不用内存数据库系统 (DataSet, DataTable)?
要造*?

你说的是ADO 连接数据库吗 我说的是处理数据 不是处理数据库啊

#7


1.用vc编写一个dll 文件然后由c#调用。--这个方法我知道
那我就不废话了,呵呵。
2.用c#编写不安全代码段?在c#中可以分配动态内存吗?
可以这么做的,参考:
Unsafe programming in C#
3.建一个2M的数组?用2M的数组代替vc中2M的动态内存?
参考第二个问题的回答,如果你要自己控制内存分配,就要做非安全的编程了。
4.用流读取文件,然后对流进行处理?
一般在C#中,就是通过文件流来处理文件的。

#8


流是把东西取出来吧。取出来放哪里还是放内存啊。

按楼主的思路。直接处理呗。无论是动态分配内存还是怎样。区别不大吧。毕竟只有两M的内存。

#1


既然用 c#, .net 为何不用内存数据库系统 (DataSet, DataTable)?
要造*?

#2


lz想多了。

只要不涉及指针,就不存在不安全的问题。

至于动态分配内存,在托管环境下,就是动态产生对象。

int[] data = new int[10000];
People[] p = new People();
...

这些都是动态生成。至于内存分配的细节,CLR已经帮你搞定了。

#3


3楼caozhy所说的证实了我讲的第3种方法是可行的,谢谢你的回答。
大家都说说 自己的看法好吗?我说的第1种和第3种方法哪个更好,优缺点是什么?第4种方法能否实现我的要求,具体如何去实现?还有其他的方法吗

#4


引用 2 楼 caozhy 的回复:
lz想多了。

只要不涉及指针,就不存在不安全的问题。

至于动态分配内存,在托管环境下,就是动态产生对象。

int[] data = new int[10000];
People[] p = new People();
...

这些都是动态生成。至于内存分配的细节,CLR已经帮你搞定了。

caozhy所说的证实了我讲的第3种方法是可行的,谢谢你的回答。
大家都说说 自己的看法好吗?我说的第1种和第3种方法哪个更好,优缺点是什么?第4种方法能否实现我的要求,具体如何去实现?还有其他的方法吗

#5


流和你说的办法不矛盾啊。它不是一个方法,是一个步骤。

用流把数据读取进来。

#6


引用 1 楼 dobzhansky 的回复:
既然用 c#, .net 为何不用内存数据库系统 (DataSet, DataTable)?
要造*?

你说的是ADO 连接数据库吗 我说的是处理数据 不是处理数据库啊

#7


1.用vc编写一个dll 文件然后由c#调用。--这个方法我知道
那我就不废话了,呵呵。
2.用c#编写不安全代码段?在c#中可以分配动态内存吗?
可以这么做的,参考:
Unsafe programming in C#
3.建一个2M的数组?用2M的数组代替vc中2M的动态内存?
参考第二个问题的回答,如果你要自己控制内存分配,就要做非安全的编程了。
4.用流读取文件,然后对流进行处理?
一般在C#中,就是通过文件流来处理文件的。

#8


流是把东西取出来吧。取出来放哪里还是放内存啊。

按楼主的思路。直接处理呗。无论是动态分配内存还是怎样。区别不大吧。毕竟只有两M的内存。