tags:

views:

94

answers:

5

I'm writing a program in C# that will save lots of data points and then later make a graph. What is the best way to save these points?

Can I just use a really long array or should I use a text file or excel file or something like that?


Additional information: It probably wont be more than a couple thousand. And it would be good if I could access it from a windows mobile app. Basically a user will be able to save times that something happens at, and then the app will use the data to find a cross correlation.

A: 

Is there any need for interoperability with other processes? If so, time to swat-up on file formats.

However, from the sound of it, you're asking on a matter of "style", with no real requirement to open the file anywhere but your own app. I'd suggest using a BinaryWriter for the task.

If debugging is an issue, a human-readable format might be preferable, but would be considerably larger than the binary equivalent.

Probably the quickest way to do it would be using binary serialization.

spender
+2  A: 

If it's millions or even thousands of records, I would probably look at using a database. You can get SQL Server 2008 Express for free, or use MySQL, or something like that.

If you go that route, LINQ to SQL makes database access a piece of cake in .NET. Entity Framework is also available, but LINQ to SQL probably has a quicker time-to-implement.

Andy White
+2  A: 

If you use a text file or excel file, etc. You'll still need to load them back into memory to plot the graph.

So if you're collecting data over a long period of time, or you want to plot the graph some time in the future, write them to a plain text file. When you're ready to plot the graph, load the file up and plot the graph.

If the data collection is within a short period of time, don't bother writing to a file - it'll just add steps to the process for nothing.

Michael Rodrigues
+1  A: 

It probably wont be more than a couple thousand. And it would be good if I could access it from a windows mobile app. Basically a user will be able to save times that something happens at, and then the app will use the data to find a cross correlation.

Adam
Additional info is best provided as a comment or an edit to the question, rather than as an answer. I've merged this additional info into your question, so I'd suggest deleting this answer now.
itowlson
+1  A: 

A really easy way of doing this would be to serialize your object list into a BinaryWriter or XMLWriter, which automatically format your data into a readable and writable format so that, when your program needs to load the data, all you have to do is deserialize it (1 line of code).

Alternatively, if you have very many records, I suggest trying to use a database. It's quite easy to interface C# with SQL Server (there's a free version called Express Edition) or MySQL, and storing and retrieving huge amounts of data is not a pain. This would be the most efficient way to accomplish your task.

Depending on how much data you have and whether you want to accomplish something like this with 1 line of code (serialization) or interface with a seperate product (the database approach), you can choose either one of the above. Of course, if you wanted to, you could just manually write the contents of your data to a text file or CSV file, as you suggested, but, from personal experience, I recommend the methods I explained above.

Maxim Zaslavsky