Category name:Uncategorized

BizTalk just keeps retrying and never stops doing so

August 5, 2015 / Comments Off on BizTalk just keeps retrying and never stops doing so

Yesterday we had some problems with a connection to an endpoint and it became clear the endpoint was less reliable as promised.

When using a static sendport you would set RetryCount and RetryInterval for that port. But in this case it was a Dynamic send port.
Fortunately we had a PipelineComponent that could add context properties in the send port on the fly.

So I added the properties BTS.RetryCount and BTS.RetryInterval. I messed with some adapter properties so every send would fail. Then I dropped in a Test message and for sure the retry was happening.

But to my horror, the retry never ended !. It just kept retrying. Then I removed the properties in the send pipeline and put the properties on the message in the orchestration. And now the behavior was completely as expected.

After some thinking I drew the following conclusion.

If those properties are set in the pipeline the following will happen:

  1. The orchestration will send the message
  2. Message hits the Messagebox  without retry propeties
  3. BizTalk Hands the message over to the send port / adapter (without the properties)
  4. Send port gets the message and will add the properties.
  5. Adapter gets the message and sees the retrycount
  6. Adapter will send and fail
  7. Adapter will honor the retry and not fail the message instead it will give a transmission failure
  8. Transmission failure will not elevate to a failed send because the retrycount is not exhausted
  9.  Original message stays in the messagebox (without the retry properties)
  10. BizTalk will start again from step 3

This is different from the scenario when the properties are set in the orchestration

  1. The orchestration will send the message with the properties
  2. Message hits the Messagebox  with retry propeties
  3. BizTalk Hands the message over to the send port / adapter
  4. Send port gets the message and pushes it to the adapter
  5. Adapter gets the message and sees the retrycount
  6. Adapter will send and fail
  7. Adapter will honor the retry and not fail the message instead it will give a transmission failure
  8. BizTalk will now recognize the Transmission failure and will increase the retrycount on the message in the mesagebox
  9. BizTalk will start again from step 3 now honoring the retrycount.
  10. If retrycount is exhausted it wil eventually fail.

This is observed behavior in BizTalk 2013.

Key takeaway:

You cannot add the bts.RetryCount and bts.RetryInterval properties for a dynamic send in the send port itself they must be set in the orchestration.

 

Install stuff in BizTalk Install Folder in custom MSI (Reminder to self)

March 22, 2010 / Comments Off on Install stuff in BizTalk Install Folder in custom MSI (Reminder to self)

I once found this document via google. It covers how to create a custom installer that will install stuff in the BizTalk Installation Folder.
it explains how to read some registry setting (the installation folder of BizTalk) and how to incoperate that into the installer.

Today I needed it again, and it took me some time to find it. So as a reminder to myself I blog about it.

The title is : Creating MSIs to install into the BizTalk directory
Read more: http://blog.biztalk-info.com/archive/2008/02/01/Creating_MSIs_to_install_into_the_BizTalk_directory.aspx#ixzz0ivXODEsW

All credits go to Eric (don’t know his last name).

 

BizTalk 2006 R2 SP1 -> Something changed in disassembling pipelines !

March 19, 2010 / Comments Off on BizTalk 2006 R2 SP1 -> Something changed in disassembling pipelines !

Although I am still investigating this item i thought it would be nice to share it as soon as i find out something went wrong.

I have a very simple schema that returns data from the SQL adapter. I deployed an envelope schema and a schema that resembles the payload. Everything was working fine until I deployed SP1 to my developement server. Now all of a sudden I see stuff like this in the eventlog :

Event Type: Error
Event Source: BizTalk Server 2006
Event Category: BizTalk Server 2006
Event ID: 5753
Date:  3/19/2010
Time:  4:10:49 PM
User:  N/A
Computer: XXXXXX
Description:
A message received by adapter “FILE” on receive location “Receive Location2” with URI “D:TempTestEnvelope*.xml” is suspended.
 Error details: There was a failure executing the receive pipeline: “FH.CE.ESB.Core_v0100.Pipelines.FH_XML_ReceivePipeline, FH.CE.ESB.Core_v0100, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4f703287a4fe098c” Source: “Pipeline ” Receive Port: “FH.CCE.FFS.RIS.SQL_FFS_DB_v0103” URI: “D:TempTestEnvelope*.xml” Reason: The disassembler found an envelope that does not have the body element.  
 MessageId:  {150B4635-125B-41B1-A622-9A989B055CD4}
 InstanceID: {E85DEE3D-F714-419D-B8AD-4E23E6530EAB}

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

I have replaced the SQL receive with a file drop to reproduce the issue easier…. 

The message that I drop in looks like this :

 <utg_die_tra_v0103 xmlns=”http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103“>
  <utg_die_tra inf_soo_kde=”1″ inf_soo_typ_kde=”BT” inf_soo_vbg_kde=”351″ inf_soo_opd_kde=”2″ inf_soo_ogr_kde=”BBO” inf_soo_znd_kde=”FFS” inf_soo_vrz_dtm_tyd=”2010-03-10T11:51:42.173″ die_tra_tch_idf=”2061″ die_tra_amk_dtm_tyd=”2010-03-10T11:51:42.173″ die_tra_amk_mdm=”BBOBSK” klt_rol_kde=”K” klt_num=”167″ die_kde=”5702″ kor_tsg_ind=”C” inh_utb_ind=”I” val_kde=”EUR” die_tra_atl_ehd=”1″ die_tra_bdg=”.400″ die_tra_dtm=”2006-12-20T00:00:00″ kor_tsl_prc=”1.500″ gsg_bdg=”26.730″ cor_ind=”N” vel_kde=”1″ vel_vst_kde=”1″ dtm_gew_fac=”2010-02-27T00:00:00″ onz_ref_ord_num=”0″ uw_ref_ord_num=”068835032918a” uw_ref_lev_pty_idf=”6883532918a”/>
 </utg_die_tra_v0103>

and the schema’s look like this :

Notice I have set the body xpath to the rootnode….
<b:recordInfo body_xpath=”/*[local-name()=’utg_die_tra_v0103′ and namespace-uri()=’http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103′]” />

Envelope Schema :

<?xml version=”1.0″ encoding=”utf-16″?>
<xs:schema xmlns:b=”
http://schemas.microsoft.com/BizTalk/2003” xmlns=”http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103” attributeFormDefault=”unqualified” elementFormDefault=”qualified” targetNamespace=”http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103” version=”1.0″ xmlns:xs=”http://www.w3.org/2001/XMLSchema“>
  <xs:annotation>
    <xs:appinfo>
      <msbtssql:sqlScript value=”exec [ffs_dbs_get_rpt_utg_die_tra_esb_p] @max_atl_rec_pr=&quot;1&quot;, @vst_kde_pr=&quot;AMR&quot;” xmlns:msbtssql=”
http://schemas.microsoft.com/BizTalk/2003” />
      <b:schemaInfo is_envelope=”yes” />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name=”utg_die_tra_v0103″>
    <xs:annotation>
      <xs:appinfo>
        <b:recordInfo body_xpath=”/*[local-name()=’utg_die_tra_v0103′ and namespace-uri()=’http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103′]” />
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element xmlns:q1=”
http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0100.Schemas.utg_die_tra_v0100” minOccurs=”0″ maxOccurs=”1″ name=”utg_die_tra” type=”utg_die_traType” />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name=”utg_die_traType”>
    <xs:attribute name=”inf_soo_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_typ_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_vbg_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_opd_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_ogr_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_znd_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_vrz_dtm_tyd” type=”xs:string” />
    <xs:attribute name=”die_tra_tch_idf” type=”xs:decimal” />
    <xs:attribute name=”die_tra_amk_dtm_tyd” type=”xs:string” />
    <xs:attribute name=”die_tra_amk_mdm” type=”xs:string” />
    <xs:attribute name=”klt_rol_kde” type=”xs:string” />
    <xs:attribute name=”klt_num” type=”xs:int” />
    <xs:attribute name=”die_kde” type=”xs:int” />
    <xs:attribute name=”kor_tsg_ind” type=”xs:string” />
    <xs:attribute name=”inh_utb_ind” type=”xs:string” />
    <xs:attribute name=”die_oms” type=”xs:string” />
    <xs:attribute name=”die_oms_avu_een” type=”xs:string” />
    <xs:attribute name=”die_oms_avu_twe” type=”xs:string” />
    <xs:attribute name=”die_tra_prs” type=”xs:decimal” />
    <xs:attribute name=”val_kde” type=”xs:string” />
    <xs:attribute name=”die_tra_atl_ehd” type=”xs:int” />
    <xs:attribute name=”die_tra_bdg” type=”xs:decimal” />
    <xs:attribute name=”frq_tyd_vak_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”frq_tyd_vak_wrd” type=”xs:int” />
    <xs:attribute name=”die_tra_dtm” type=”xs:string” />
    <xs:attribute name=”kor_tsl_prc” type=”xs:decimal” />
    <xs:attribute name=”ehd_kde” type=”xs:int” />
    <xs:attribute name=”gsg_bdg” type=”xs:decimal” />
    <xs:attribute name=”gsg_atl” type=”xs:decimal” />
    <xs:attribute name=”gsg_tli” type=”xs:string” />
    <xs:attribute name=”cor_ind” type=”xs:string” />
    <xs:attribute name=”vel_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”vel_vst_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”die_niv_een_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”die_niv_twe_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”dtm_gew_fac” type=”xs:string” />
    <xs:attribute name=”dtm_gre_fac” type=”xs:string” />
    <xs:attribute name=”onz_ref_doc_typ_kde” type=”xs:string” />
    <xs:attribute name=”onz_ref_doc_idf” type=”xs:string” />
    <xs:attribute name=”uw_ref_doc_typ_kde” type=”xs:string” />
    <xs:attribute name=”uw_ref_doc_idf” type=”xs:string” />
    <xs:attribute name=”onz_ref_ord_num” type=”xs:string” />
    <xs:attribute name=”uw_ref_ord_num” type=”xs:string” />
    <xs:attribute name=”onz_ref_lev_pty_idf” type=”xs:string” />
    <xs:attribute name=”uw_ref_lev_pty_idf” type=”xs:string” />
    <xs:attribute name=”tyd_dvr_tra_typ_kde” type=”xs:int” />
    <xs:attribute name=”btw_kde” type=”xs:string” />
    <xs:attribute name=”onz_ref_ord_pty_tch_idf” type=”xs:string” />
    <xs:attribute name=”onz_ref_lev_pty_tch_idf” type=”xs:string” />
  </xs:complexType>
</xs:schema>

Body Schema

<?xml version=”1.0″ encoding=”utf-16″?>
<xs:schema xmlns:b=”
http://schemas.microsoft.com/BizTalk/2003” xmlns=”http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103” attributeFormDefault=”unqualified” elementFormDefault=”qualified” targetNamespace=”http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103” version=”1.0″ xmlns:xs=”http://www.w3.org/2001/XMLSchema“>
  <xs:annotation>
    <xs:appinfo>
      <msbtssql:sqlScript value=”exec [ffs_dbs_get_rpt_utg_die_tra_esb_p] @max_atl_rec_pr=&quot;1&quot;, @vst_kde_pr=&quot;AMR&quot;” xmlns:msbtssql=”
http://schemas.microsoft.com/BizTalk/2003” />
      <b:schemaInfo root_reference=”utg_die_tra” xmlns:b=”
http://schemas.microsoft.com/BizTalk/2003” />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name=”utg_die_tra” type=”utg_die_traType”>
    <xs:annotation>
      <xs:appinfo>
        <b:properties>
          <b:property distinguished=”true” xpath=”/*[local-name()=’utg_die_tra’ and namespace-uri()=’http://FH.CCE.FFS.RIS.SQL_FFS_DB_v0103.Schemas.utg_die_tra_v0103′]/@*[local-name()=’inf_soo_opd_kde’ and namespace-uri()=”]” />
        </b:properties>
      </xs:appinfo>
    </xs:annotation>
  </xs:element>
  <xs:complexType name=”utg_die_traType”>
    <xs:attribute name=”inf_soo_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_typ_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_vbg_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_opd_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_ogr_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_znd_kde” type=”xs:string” />
    <xs:attribute name=”inf_soo_vrz_dtm_tyd” type=”xs:string” />
    <xs:attribute name=”die_tra_tch_idf” type=”xs:decimal” />
    <xs:attribute name=”die_tra_amk_dtm_tyd” type=”xs:string” />
    <xs:attribute name=”die_tra_amk_mdm” type=”xs:string” />
    <xs:attribute name=”klt_rol_kde” type=”xs:string” />
    <xs:attribute name=”klt_num” type=”xs:int” />
    <xs:attribute name=”die_kde” type=”xs:int” />
    <xs:attribute name=”kor_tsg_ind” type=”xs:string” />
    <xs:attribute name=”inh_utb_ind” type=”xs:string” />
    <xs:attribute name=”die_oms” type=”xs:string” />
    <xs:attribute name=”die_oms_avu_een” type=”xs:string” />
    <xs:attribute name=”die_oms_avu_twe” type=”xs:string” />
    <xs:attribute name=”die_tra_prs” type=”xs:decimal” />
    <xs:attribute name=”val_kde” type=”xs:string” />
    <xs:attribute name=”die_tra_atl_ehd” type=”xs:int” />
    <xs:attribute name=”die_tra_bdg” type=”xs:decimal” />
    <xs:attribute name=”frq_tyd_vak_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”frq_tyd_vak_wrd” type=”xs:int” />
    <xs:attribute name=”die_tra_dtm” type=”xs:string” />
    <xs:attribute name=”kor_tsl_prc” type=”xs:decimal” />
    <xs:attribute name=”ehd_kde” type=”xs:int” />
    <xs:attribute name=”gsg_bdg” type=”xs:decimal” />
    <xs:attribute name=”gsg_atl” type=”xs:decimal” />
    <xs:attribute name=”gsg_tli” type=”xs:string” />
    <xs:attribute name=”cor_ind” type=”xs:string” />
    <xs:attribute name=”vel_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”vel_vst_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”die_niv_een_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”die_niv_twe_kde” type=”xs:unsignedByte” />
    <xs:attribute name=”dtm_gew_fac” type=”xs:string” />
    <xs:attribute name=”dtm_gre_fac” type=”xs:string” />
    <xs:attribute name=”onz_ref_doc_typ_kde” type=”xs:string” />
    <xs:attribute name=”onz_ref_doc_idf” type=”xs:string” />
    <xs:attribute name=”uw_ref_doc_typ_kde” type=”xs:string” />
    <xs:attribute name=”uw_ref_doc_idf” type=”xs:string” />
    <xs:attribute name=”onz_ref_ord_num” type=”xs:string” />
    <xs:attribute name=”uw_ref_ord_num” type=”xs:string” />
    <xs:attribute name=”onz_ref_lev_pty_idf” type=”xs:string” />
    <xs:attribute name=”uw_ref_lev_pty_idf” type=”xs:string” />
    <xs:attribute name=”tyd_dvr_tra_typ_kde” type=”xs:int” />
    <xs:attribute name=”btw_kde” type=”xs:string” />
    <xs:attribute name=”onz_ref_ord_pty_tch_idf” type=”xs:string” />
    <xs:attribute name=”onz_ref_lev_pty_tch_idf” type=”xs:string” />
  </xs:complexType>
</xs:schema>

The solution is set up analog to the solution decribed by Richard Seroter here : http://seroter.wordpress.com/2007/01/03/debatching-inbound-messages-from-biztalk-sql-adapter/

This item is still under  investigation, expect a follow up…..

 

Now that BizTalk Utillities is out of business It’s time ………………

February 10, 2009 / Comments Off on Now that BizTalk Utillities is out of business It’s time ………………

BizTalk Utillities used to have a very nice suite of solid adapters. For some reason, Pieter van de Merwe has stopped his business.

We tried for months to get into contact with him to no avail. We called all the possible phone numbers we could find and finally we got somebody on the line.
It was not Pieter himself but someone else working there in the same office. This person mentioned that he believed that BizTalk Utillites were no longer available as a product.
This answer in combination with our results (as to getting into contect with BizTalk Utillities) makes me believe the person on the phone was correct.

If that’s true !

IT’S TIME FOR MICROSOFT  TO WRITE A DESCENT ODBC/ADO ADAPTER FOR BIZTALK !!!

Mike Griffin (EntitySpaces / dOOdads / MyGeneration) talks to the guys from .Net Rocks

September 27, 2007 / Comments Off on Mike Griffin (EntitySpaces / dOOdads / MyGeneration) talks to the guys from .Net Rocks

Well a year ago I was very exited about Entityspaces. I am still very exited about it but unfortunately in my current (very busy) project we don’t do that much custom development anymore. We are using plain out of the box BizTalk. And develop orchestrations maps etc.But I still read their blog with great interest and follow all the new functionalitry that is beeing added like the new Joins and Aritmetic expressions.


Anyway what i wanted to tell was that Mike Griffin talks to the guys from DotNet Rocks. Have a peek at the video here

Wish list for BizTalk vNext

September 17, 2007 / Comments Off on Wish list for BizTalk vNext

It’s been a while since my last post. This was mainly due to the fact that I was incredibly busy  at my current project.


BizTalk R2 has been released and you can download an evaluation edition here.


Richard Seroter has a nice post about stuff he wants to see in in BizTalk vNext. You can read his wish list here

Awesome SQL power

March 20, 2007 / Comments Off on Awesome SQL power

A couple of days ago I went to a SQL 2005 SQL Deep Dive. This was a powerpoint only presentation of two days with a few demo’s in it. It was a very interesting deep dive and I learned a couple of things I thought I needed to share.


SQL Server keeps some statistics on tables and indexes. Once SQL server is started the statistics are kept and the statistics are lost after a reset. The SQL Guru’s called them DMV’s. Below are a few usefull DMV queries


List Indexes not used :


select object_name(i.object_id), i.name
from sys.indexes i, sys.objects o
where  i.index_id NOT IN (select s.index_id
       from sys.dm_db_index_usage_stats s
    where s.object_id=i.object_id and
    i.index_id=s.index_id and
   database_id = db_id(‘##YOUR DATABASE##’) )
and o.type = ‘U’
and o.object_id = i.object_id
order by object_name(i.object_id) asc


Average Stalls per Read, Write and Total IO


select database_id, file_id
 ,io_stall_read_ms
 ,num_of_reads
 ,cast(io_stall_read_ms/(1.0+num_of_reads) as numeric(10,1)) as ‘avg_read_stall_ms’
 ,io_stall_write_ms
 ,num_of_writes
 ,cast(io_stall_write_ms/(1.0+num_of_writes) as numeric(10,1)) as ‘avg_write_stall_ms’
 ,io_stall_read_ms + io_stall_write_ms as io_stalls
 ,num_of_reads + num_of_writes as total_io
 ,cast((io_stall_read_ms+io_stall_write_ms)/(1.0+num_of_reads + num_of_writes) as numeric(10,1)) as ‘avg_io_stall_ms’
from sys.dm_io_virtual_file_stats(null,null)
order by avg_io_stall_ms desc


Top 50 IO per statement


SELECT TOP 50
        (qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count as [Avg IO],
            SUBSTRING(qt.text,qs.statement_start_offset/2,
   (case when qs.statement_end_offset = -1
   then len(convert(nvarchar(max), qt.text)) * 2
   else qs.statement_end_offset end -qs.statement_start_offset)/2)
  as query_text,
  qt.dbid, dbname=db_name(qt.dbid),
  qt.objectid,
  qs.sql_handle,
  qs.plan_handle
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
       [Avg IO] DESC


Rarely used indexes


declare @dbid int
select @dbid = db_id()
select objectname=object_name(s.object_id), s.object_id
 , indexname=i.name, i.index_id
 , user_seeks, user_scans, user_lookups, user_updates
from sys.dm_db_index_usage_stats s,
 sys.indexes i
where database_id = @dbid
and objectproperty(s.object_id,’IsUserTable’) = 1
and i.object_id = s.object_id
and i.index_id = s.index_id
order by (user_seeks + user_scans + user_lookups + user_updates) asc


Temp DB usage


SELECT t1.session_id,
(t1.internal_objects_alloc_page_count + task_alloc) as allocated,
(t1.internal_objects_dealloc_page_count + task_dealloc) as deallocated
 , t3.sql_handle, t3.statement_start_offset
 , t3.statement_end_offset, t3.plan_handle
from sys.dm_db_session_space_usage as t1,
  sys.dm_exec_requests t3,
(select session_id,
   sum(internal_objects_alloc_page_count) as task_alloc,
   sum (internal_objects_dealloc_page_count) as task_dealloc
      from sys.dm_db_task_space_usage group by session_id) as t2
where t1.session_id = t2.session_id and t1.session_id >50
and t1.database_id = 2   — tempdb is database_id=2
and t1.session_id = t3.session_id
order by allocated DESC


For the query above you will need to get the query and the plan handles (wich will have the actual SQL statement beeing executed) here is a query to get those :


select
(select text from sys.dm_exec_sql_text(put_sql_handle_here)) as sql_text
,(select query_plan from sys.dm_exec_query_plan(put_plan_handle_here)) as query_plan


List out indexes with the most contention e.g. blocking


declare @dbid int
select @dbid = db_id()
Select dbid=database_id, objectname=object_name(s.object_id)
 , indexname=i.name, i.index_id –, partition_number
 , row_lock_count, row_lock_wait_count
 , [block %]=cast (100.0 * row_lock_wait_count / (1 + row_lock_count) as numeric(15,2))
 , row_lock_wait_in_ms
 , [avg row lock waits in ms]=cast (1.0 * row_lock_wait_in_ms / (1 + row_lock_wait_count) as numeric(15,2))
from sys.dm_db_index_operational_stats (@dbid, NULL, NULL, NULL) s
 ,sys.indexes i
where objectproperty(s.object_id,’IsUserTable’) = 1
and i.object_id = s.object_id
and i.index_id = s.index_id
order by row_lock_wait_count desc


There were many more interesting queries, but it came clear that a lot of these queries were incorparated into the new Sql Performance DashBoard. (You will need SQL 2005 SP2 for this to work) Go and get the SQL Performance Dashboard >>here<< 


Below is a screenshot of this amazing tool. Everything is click-able and you can drill down into the details.


SQL Perf DashBoard.JPG
 


 

Is there something wrong with the DataGridView in .Net 2.0

Well….

Just tried something yesterday and i loaded up a dataset with 30.000 rows and tried to show it via the DataGridView.

But the performance of the DatagridView is just toooooo bad ….. It’s looking like Windows 2.0 my old 4 mhz 8086, it is sooo slow in the screenpainting….

Is this just my experience or are others experiencing this too …. And if you have experienced it, what can you do about it ?

  • Recent Posts
  • Recent Comments
  • Archives
  • Categories
  • Meta