Baseline and optimize
Trying to optimize any software without determining a baseline is like shooting in the dark. You may hit the target but not before you have spent significant time hitting the wrong thing. Same goes for use of NHibernate. Before you think of optimizing your data access layer, first measure how it is performing. You can use various different tools to measure performance of your data access layer. NHProfiler from www.hibernatingrhinos.com is one of the best tools that I have come across so far. Besides showing basic details such as the actual SQL sent to server and time taken to execute each SQL statement, NHProfiler shows some interesting information about your queries. I particularly like the analysis tab that groups queries by various parameters such as number of time it is run, time it took to execute, and so on.
Another feature I like is the session usage information. Following is a snapshot of the Session Usage tab giving summary of a session. It shows basic information...