C# I/O 与 C I/O
C# I/O vs C I/O
我有一个C#程序需要从一个平面文本文件中读取数千万到数亿条记录。使用 p/invoke 调用非托管 C/C++ dll 在单独的线程上处理所有文件输入是否有显着的性能提升,或者性能提升微不足道,例如在 C# 中处理我的文件 IO 会更好吗?
使用 C/C++ dll 可能不会显着提高性能。 C# 运行在具有相当高效的 JIT 编译器的环境中,因此我的猜测是代码性能受到大约 100 MB/s 的硬盘读取速度的限制。当然,如果你有 SSD,你的里程可能会有所不同。
请注意,如果一条记录是例如1000 字节,您正在读取 1 亿条记录,这意味着 100 GB。读取需要1000秒,也就是15分钟多,只是因为硬盘速度慢。
由于 CPU 绑定代码和 IO 绑定之间的差异要求您通过使用本机 C 编写代码节省的时间将是收益的百分之几。
只有当执行的实际指令成为瓶颈时,您才会看到拥有单独的本机函数的好处。例如在 RAM 中处理大量数字或计算 3D 图形的像素。
在使用 IO 时不太值得花时间尝试它。
我有一个C#程序需要从一个平面文本文件中读取数千万到数亿条记录。使用 p/invoke 调用非托管 C/C++ dll 在单独的线程上处理所有文件输入是否有显着的性能提升,或者性能提升微不足道,例如在 C# 中处理我的文件 IO 会更好吗?
使用 C/C++ dll 可能不会显着提高性能。 C# 运行在具有相当高效的 JIT 编译器的环境中,因此我的猜测是代码性能受到大约 100 MB/s 的硬盘读取速度的限制。当然,如果你有 SSD,你的里程可能会有所不同。
请注意,如果一条记录是例如1000 字节,您正在读取 1 亿条记录,这意味着 100 GB。读取需要1000秒,也就是15分钟多,只是因为硬盘速度慢。
由于 CPU 绑定代码和 IO 绑定之间的差异要求您通过使用本机 C 编写代码节省的时间将是收益的百分之几。
只有当执行的实际指令成为瓶颈时,您才会看到拥有单独的本机函数的好处。例如在 RAM 中处理大量数字或计算 3D 图形的像素。
在使用 IO 时不太值得花时间尝试它。