【问题标题】:C# for CSV import: array or datatable or something else?用于 CSV 导入的 C#:数组或数据表或其他?
【发布时间】:2017-05-16 15:21:43
【问题描述】:

我已经在 VBA/Excel 中编写了一些代码来分析 IQ RF 数据,方法是将 CSV 文件导入 Excel,然后对其进行“处理”。但这很慢,我一次只能输入超过 10 ^ 6 行。所以我正在使用 C# 重新编写它,但我只是 C#/VS 的新手,所以学习曲线很大......

我是否应该尝试将我的 64x10^6 行放入某种数据库、二维数组、结构或其他某种数据结构中?我应该知道的任何限制/好处?

(计划然后计算每个数据点的这 2 个“列”的平方和的对数以找到幅度,并添加一个时间“列”。一旦完成,我将开始工作和基于振幅的事件的停止时间,最终将得到另一个新的数据集,分析将继续。)

【问题讨论】:

  • 您也可以使用LocalDB,它是 SQL Express 的更简单版本。此时您应该尝试使用关系数据库。
  • 谢谢,我会在这里搜索所有建议。很难知道从什么开始,所以任何建议都会帮助我探索正确的可能途径。 :)

标签: c# arrays csv struct


【解决方案1】:

似乎任何关系数据库都可以在这里工作。由于您在 .NET 中工作,因此最简单的方法是使用 Sql Server Express。见:https://www.microsoft.com/en-us/sql-server/sql-server-editions-express 请记住,它有 10Gb 的数据库大小限制。

【讨论】:

  • 谢谢。我去调查一下。我也可能会采用 mbmcavoy 的简单数组的想法,但是将分析结果从初始数据集移到数据库中,因为这样会产生更多的列和详细信息。 :)
【解决方案2】:

您甚至可以在没有任何 c# 的情况下仅在 SQL 中执行此操作 - 它具有执行计算和条件操作的能力,您还可以将 CSV 数据直接导入表中。 如果你用谷歌搜索,会有很多例子;)(即,为你的日志计算搜索'LOG(Transact-SQL)')

【讨论】:

  • 它最终会使用 C/.net 库来进行仪器硬件控制和数据捕获,但一旦它变得活跃起来...... :-/
【解决方案3】:

根据您的描述,您的数据听起来像是一个数字系列(随时间变化的值),您不需要额外长期存储该数据,而是一种处理数据以提供报告的方法。

假设您有足够的可用内存,使用数组并循环遍历它们可能是最简单的。这比使用数据库的学习曲线要​​小得多,而且您不需要数据库可以提供的高级功能。

但是,如果您的输入非常大,内存可能会成为问题。如果您可以将数据分成更小的块,则可以减少工作中的数据。即,读取前 1000 个数据点,处理它们,然后用接下来的 1000 个数据点重新加载数组。

另一个想法 - 这些数据来自哪里?这个问题意味着一个记录的数据集。也许源还提供了处理数据的工具。

例如,我使用了一个实验室数据采集系统,该系统以 5KHz 记录了约 600 个通道;原始文件非常庞大且采用专有格式。有一些方法可以将数据导出为 CSV 或其他通用格式,但由于文件大小,它们很难使用,而且导出过程本身也很乏味。制造商提供了一个与 C# 兼容的 DLL“工具包”库,我可以使用它来打开和读取本机文件,相对容易。

【讨论】:

  • 是的,你的假设是正确的。关于内存,仪器仅限于 1600 万行 IQ 数据,因此永远不会超过此。有用于数据捕获本身和仪器控制的 C 库。我打算继续使用这些并将数据直接拖到应用程序中,但我还没有阅读大量的文档。在已经需要的情况下进行这项工作仍然很有用
  • - 虽然也获取了数据,所以我想我会先在没有专业硬件的情况下执行此操作,然后当它工作时再进行。 :)
  • 关于内存,仪器被限制为 1600 万行 IQ 数据,所以永远不会超过这个。所以我猜256 MB就是为了这个? 1600 万 * 8 字节(双精度)* 2(I + Q 值)?然后再增加 128 MB 的时间和 128 MB 的幅度,但是一旦运行并减少后我可以减少内存使用量?
  • 基本上是我的想法。这是很多内存,但仍然在许多 PC 的容量范围内。当然,较旧的机器可能会遇到问题,或者问题可能会在未来变得更大并且超出功能强大的 PC。您可能不需要将时间存储在数组中,因为这可以根据需要从索引和采样率中计算出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2021-11-15
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多