For an application in .NET Compact Framework, I need to load about 10MB worth of data stored in XML files into datasets. On a desktop, it takes approximately no time to load that data into a dataset, or write it back out to a XML file.

I thought to myself, "since this worked in less than 1 second on a PC, I should be able to do this on a mobile device in maybe 5-10 seconds" - acceptable for an application startup time. Right? Wrong. Try over 4 minutes. Nothing fancy, just a DataSet.ReadXml() and then iterating through and validating data.

Right now, you're thinking to yourself (because I'm writing this I get to choose), "why not use SQL CE or something?" - because the sole purpose of this data is to get enough data loaded into memory to get a head start on synchronizing it with the server, and SQL CE is not worth getting into as a dependency for this task. It's supposed to be as simple of a process as possible.

"Oh, that makes sense," you think. Thank you.

Knowing that 4 minutes for an applicaiton startup was a little bit excessive, I spent a few minutes turning it into a tab-delimited file instead.

The results? All the data loaded in 20 seconds. It's not fancy, it's not flexible, but it works. And that's what I care about at the end of the day.

This morning was a rude awakening.

Suddenly an application that has been running pretty solid using LINQ to SQL for basic CRUD operations for the last few months was throwing errors this morning about "Row not found or changed."

Resolution? Manually retrieving another context copy of the object and 'manually' copying properties from one to the other, then calling .SubmitChanges().

I think I could do without many more of those!

Learned something today - the hard way.

In my deployment utility (which is a glorified way of simply deploying a solution by using the MOSS API), when I do an upgrade, I get the existing solution by ID via GetSolutionByID(string id) so that I can use the SPSolution object to perform the necessary actions.

However, in the middle of deployment, to my surprise, MOSS started yelling back at me, saying "Can't find solution with ID <solutionID>", but then declares "A solution with the name <SolutionName> already exists".

It appears that MOSS cares whether or not the ID you pass into GetSolutionByID() is lowercase. Otherwise, MOSS won't find the solution. I would have thought that this would be case insensitive, but it is apparently not.