as
suggested is valid only if you do not use
system transactions. This transaction factory just ignores transaction
scopes.
Moreover, the system transaction handling of the default
transaction factory is normally not involved when using regular
transactions, so switching the transaction factory should not have much
impacts on projects only using regular transactions, included on
performances, while it is a bug source for other projects.
Between the
two transaction factories, the main difference when only using regular
transactions is the fact the system aware one (and default one) will
check on many occasions whether a system transaction is ongoing or not.
This can be avoided by disabling the auto-join transaction feature, and
explicitly asking the session to join the system transaction when you
use one.
https://nhibernate.info/doc/nhibernate-reference/transactions.html#transactions-scopes
The rework on system transactions has introduced thread synchronization
logic to avoid concurrency troubles occurring with distributed
transactions. So far it seems to have fixed most of the issues
NHibernate was having with distributed transaction scopes, so it is
unlikely it will be undone.
Maybe a "non-distributed system transaction"
factory could be added for those not needing to support distributed
transactions, and supposing the performance loss comes from these
synchronizations. But things are very tricky there, a scope can be
elevated to distributed on many unexpected cases. (Using ODBC data
provider, or providers from SAP products (Sybase, Hana, ...) seems to
always cause all scopes to be distributed; some other data-providers
will go to distributed if opening, closing, reopening a connection in
the scope, while others will not; ...)