ThinkGeo.com    |     Documentation    |     Premium Support

Tab File Performance Issue

Dear All,


I am working with Tab file. Every things is goining fine for me. My one concern point is map loading time.


I debug my code, every thing running fast but WinformsMap1.Refresh() takes a lot of time, due to this the overall map loading time is increase (35 - 40 sec).

 


I am comparing my product from MapInfo map loading time, the same map loaded in Mapinfo within second.


It may be problem in my code or may me some other thing, which will help me to improve my application performance. Please help to diagnose the root cause.

 


 


Regards 

Sanjay




Hi Sanjay, 
  
 I noticed you disabled the index which will speed up the loading. I believe the Refresh() method is locked up in querying data from tab file. 
  
 You can use the static method TabFeatureLayer.BuildIndex() to build an index file very easily. 
  
 Thanks, 
 Lee 


Dear Lee, 



Thanks for reply and your valuable suggestion. 

 


Before implementing your suggestion, the map loading time is always vary betwwen 35-40 sec.




Now, I have implemented your suggestion and whatever I monitor trying to explain you 



1. First time of execution takes near abot 2-3 minutes in map loading. 

2. once the .idx file generated, then it is taking 15-20 second in map loading. 

3. When we are trying to load map or zoom in or zoom out (I think any activity where Refresh() method used), in this time CPU utilization is increased near about 50-60 percent. 



Now can we reduce more time to improve performance? I think you can understand my problem easily.




Regards 

Sanjay 

 



Sanjay, 
  
 I would like to ask you what’s the version number did you use? In May release we improved the tab file support, right now we support the tab file completely based on the managed code. If you already used the new public release in your application, can you send your tab file with the index file to us so that we can reproduce the problem and track the problem properly. I guessed maybe it has too much features to draw, however we still need your tab file to research the reason, if your tab file is large, please contact support@thinkgeo.com and upload it to our FTP server, 
  
 Thanks, 
  
 Scott,

Dear Scott, 
  
 I have uploaded my sample project for you with my ticket no 3370. Please go through attachment. Please check this project with my concern point written in post 130. Hoping for some fruitful result. 
  
 Regards 
 Sanjay 


Sanjay, 
  
 Thanks for your sample with the tab file, according to my tests, my result is almost the same as you mentioned below: 
  
 1. once the .idx file generated, then it is taking 15-20 second in map loading.  
 2. When we are trying to load map or zoom in or zoom out (I think any activity where Refresh() method used), in this time CPU utilization is increased near about 50-60 percent.  
  
 Just a little differences to you, when I was trying to load map or zoom in or zoom out, the CPU usage was just increased about 25%. I have posted the issue to our development team so that we can improve the load performance properly. 
  
 Thanks, 
  
 Scott,

Dear Scott, 



Thanks for replay and also for working with my Tab file performance issue. 



As I am seeing you have taken only my two points, but you left my first point that is 



1. First time of execution takes near abot 2-3 minutes in map loading. It means, if tab file is not indexed (.idx file is not there), then it takes 2-3 minutes. It means, if without creating index file upload time is 30-35 second and with index creation upload time is 2-3 minutes(Only first time to create index). It is obvious the index creation time is very high. 



So, Please take care this points also. 



Regards 

Sanjay 

 



Sanjay, 
  
 I checked your tab file, it has more than 220000 records, so when you first to create the index file it took 2-3 minutes times. But it is only for the first time to create the index file. After you created the index file, it can increase the load performance observably. Now after you created the associate index file for your tab file, when the tab file is loading, it takes about 15-20 seconds to load the tab file, I think this is a performance issue when loading the tab file with index file. I have added it to our issue tracker system and our development team will work on that, if there are any updates I will let you know, 
  
 Thanks, 
  
 Scott,

Dear Scott, 



Thanks for working on sample file. Now the situation is totally change: 



1. For first time it takes near about 3 minutes to create index file. 

2. After creating index file, the file loading time is reduced drastically and now it is equal to or near about loading time of map info. So I am happy with this and thanks for this. 



But still my concern about my 1st point. Is it possible to reduce time for creating index file? Currently with 5.0.25.0, it is taking 2-3 minutes.


One more thing, Some times I  am getting error InvalidOperationException Was unhandled and the message is Read and Write not Equal. Can you brief why this error is ocuuring.



Regards 

Sanjay



Sanjay, 
  
 For your 1st point, it always takes about 2-3 minutes, the reason is that your tab file has more than 230000 records, when creating its index file, there are two steps cost most of the times below: 
  
 1, Get all features from the tab file feature source. It has more than 230000 features. 
  
 2, Add each feature to the RtreeSpatialIndex object to create the index file completely. 
  
 Currently we don’t have a better way to resove this issue when creating the index file if the tab file has too much features. Also I would like to ask you why you focus on the speed for creating index file? It is slow, but we only need to create the index file once. Once the index file created, it can increased the drawing performance greatly. 
  
 In addition, about the InvalidOperationException error, I would like to ask you when the error occurred, for my side, I cannot reproduce your problem properly,  
  
 Thanks, 
  
 Scott,

Dear Scott, 
 Thanks for reply, 
  
 I am not focusing on the speed of creating index file, that was just a query from my side. Later we will see, if any requirement occur on the speed. Ofcourse after creating index file the performance increased. So, lets drop first point. 
  
 2. Now, Read and Write not equal ocurrs - when I am using point style based tab file. This error not occur when your tab file is area style based. This error occurs on the line where I am creating index. eq 
  
 TabFutureLayer.BuildIndexFile(fileName) 
  
 Remarks above line and  use like below 
 'TabFeatureLayer.BuildIndex(fileName) 
 abc.RequireIndex=false                 'Where abc is TabFutureLayer 
  
 Now its working and no error comes. So, is the tab file based on point style not require index file? Or how can stop the exception. 
 Regards 
 Sanjay

Sanjay, 
  
 Thanks for your questions! 
  
 For your exception, can you provide a simple sample to us, just a simple sample with tab file data so that we can reproduce the exception what you met. If there are exceptions for creating index file, I think that’s our problem and we need to fix it. 
  
 Thanks, 
  
 Scott,

Dear Scott, 
  
 I have uploaded my sample Tab File with my Ticket no 3370. Please collect from there. 
  
 In the sample application there are two types of TAB file, one display with Area style (Vector.tab) and another display with point style.  
  
 Please check the problem. 
  
 Regards 
 Sanjay

Sanjay, 
  
 Thanks for your sample in the ticket 3370 and I recreated the problem properly, I have added it to our issue list and our development team will work on it, if there are any updates I will let you know, 
  
 Thanks, 
  
 Scott,

Dear Scott, 
  
 Thanks for reply and taking my issue to work. I will wait for your response. 
  
 Regards 
 Sanjay 


Can I just ask a question here - the MapInfo format already has an index, usually stored in the *.IND file. Is this index used if available? Is the ThinkGeo *.IDX file the same format as the *.IND file?

Dear David, 
  
 Thanks for reply, 
  
 I am not understand, what you are asking and regarding what? 
  
 My problem is, 
  
 TabFuterLayer.BuildIndex(filename) 
  
 The above statement is working properly if map display with area style, but not with point style. 
  
 I think The ThinkGeo person only can reply, is .IND and .IDX file is same or not? 
  
 Regards 
 Sanjay

Yes, that was a question for ThinkGeo - I have thousands of MapInfo tables, most of which are indexed already. So, I was just wondering whether existing indexes are usable or whether I have to rebuild them all for ThinkGeo. 
  
 I have been away from Malaysia for a few weeks now so I haven’t gotten a chance to test the new functionality yet.

Sanjay & David, 
  
 Sanjay, we have found out where is the real problem and our development is working on it, it needs to take some times, I will keep you the updates for this issue.  
  
 David, thanks you for the questions! Actually, the ThinkGeo .IDX is not the same as the MapInfo .IND index file, the .IDX file is generate by the RTreeSpatialQuery arithmetic. I’m not sure MapInfo how to generate the .IND index file, I think they are not the same. The TtreeSpatialQuery arithmetic is just ours for generating the .IDX file. If you want to migrate your application to ThinkGeo, it is easy that you just need to re-create the index file for each tab file. 
  
 Any more questions please let me know, 
  
 Thanks, 
  
 Scott, 
  


Dear Scott, 
  
 Thanks for reply and working with my problem, 
  
 Now situation is, I am using 5.0.34.0 version,  
  
 TabFuterLayer.BuildIndex(filename), the statement is working with both type of file (area style and point style tab file). 
  
 Now no error is coming but the debugging result which I monitored is  
  
 1. Case I - If the tab file is area based style and .idx file is not present, it is taking nearly 3 minutes (depends upon file size), if .idx file is present is displays within second, this matter we had already discussed and also I have no issue with case I. 
  
 2. Case II - If the tab file is point style based and .idx file is not present, is is taking nearly 15-20 seconds (depends upon file size), if .idx file is present it also taking nearly 10-15 second. The CPU utilization increase with 50-55% in point based file, all the time either .idx is available or not. 
  
  
 So, my concern point is case II, in both case (.idx is available or not) taking near about same time, while area based file is much bigger then point based file 
  
 Regards 
 Sanjay