Wednesday, October 30, 2013

Provider Microsoft.Jet.OLEDB

In the past couple of years, I've worked with several DBMS: Oracle, SQLServer, MySQL, DB2, SyBase, PostgreSQL and MSAccess. And in several "flavors". I even worked with MySQL when it had no Stored Procedures support! Which one is the best? Well, as most answers in the IT world: it depends. Just like that! However, the most "Buggy" to me is undoubtedly MSAccess. And if the idea is just to have the database file along side a simple WPF app and connect to it using JET OleDBProvider, then it gets even worse!

Here goes a simple one:
      ISNULL is a Built-in function available in SQLServer. So, one might wonder: MSAccess is just another product in the Microsoft product line. It probably has this. Well, no, it doesn't. It has the NZ function. It does have IsNull, but with a different meaning (VB Style).

So far, I'm cool with it. But if you're going to connect using Microsoft OLEDB Provider for Microsoft JET, the "NZ" function is not available. At the best, you have the "ugly" IIf. Don't like!
I know that MSAccess is from another Microsoft's product family and, for historical reasons, it has its "VBLook", but damn it's annoying!

More info:
Cool article on some MSAccess "Common Query Hurdles";
Yet another bug list: Allen B. tips for Microsoft Access (Scroll down to the "Flaws in Access")
(I've already had the displeasure to see some of them live!)

Tuesday, October 15, 2013

MJIT – Multicore Just-In-Time Compilation

Managed Execution Environments brought us a new world. The advantages are priceless and this paradigm changed the way we develop software solutions. However, it does have a downside: It adds overhead. For extremely high performance software (real-time critical), you would still write native apps, but as time passes and hardware capabilities increase, the overhead will be irrelevant. Nevertheless, improvements to the way the execution engine works are always welcome. Putting aside the NGEN feature, the .NET 4.5 introduced Multicore Just-in-time compilation, "which uses parallelization to reduce the JIT compilation time during application startup."

Check it out:

One cool detail:
"Multicore JIT is on by default for Silverlight 5 and ASP.NET applications, but not for desktop applications. The main reason for this is that the CLR needs a place to save and load the files containing the JIT profile information. Silverlight 5 and ASP.NET applications are hosted applications and the host provides a good place to store the profile information. We also know that all of these applications have a similar startup path and will be able to take advantage of MCJ. For desktop applications we don't have a good location to put the profile, and not all applications will benefit from MCJ on process startup. For desktop applications, we chose to provide a set of APIs that can be used to "opt-in" if it will benefit your application."

More resources:
Check Vance Morrison (.NET Performance Architect) and Dan Taylors (Multicore JIT program manager) interview on Channel9.