Author |
Topic |
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 12 2014 : 06:50:13 AM
|
Hi
we're working with a single a solution with over 100 projects (VS 2008) and the latest VA.
It takes very long to rebuild VA database and the VA suggestion lists contains so much items that finding symbols via VA is less effective than using plain file search.
Most of our developers are only interested in symbols of several projects.
Is it possible to define a list of projects (or directories) that should be parsed?
regards, Silvio Iaccarino |
|
feline
Whole Tomato Software
United Kingdom
19025 Posts |
Posted - Sep 12 2014 : 8:41:05 PM
|
Unfortunately not really. VA is designed to parse the entire solution. There are some things we can do to try and help though.
Firstly, do you work with:
VA Options -> Listboxes -> Get content from default Intellisense
turned On or Off? If this is turned Off then disabling the IDE intellisense parser may make quite a bit of difference, since there will only be one parser working, not two. Doing this is explained here:
http://docs.wholetomato.com/default.asp?W133
Another thought it to turn Off the option:
VA Options -> Performance -> Parse all files when opening a project
this is useful in exactly your situation, a large solution that takes a lot of parsing.
When searching for a symbol, are you able to filter the list on a class or namespace name, as well as the symbol name? If you use a space you can enter more than one search term, so "classEditor addText" will search for both terms, in any order. This should help you to locate the symbols you want quite quickly, even in a very large solution. |
zen is the art of being at one with the two'ness |
|
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 15 2014 : 02:22:38 AM
|
I have renamed feacp.dll, disabled external file watch and parsing while opening. |
|
|
feline
Whole Tomato Software
United Kingdom
19025 Posts |
Posted - Sep 16 2014 : 2:09:52 PM
|
Had you done this before, or have you only now done this?
If you have now done this, how has this effected the parsing time when you load the solution? I would expect this to have cut the parsing time right down, so hopefully this has been the effect.
Is using the class name or namespace name doing anything to help you search in the Find Symbols dialog? |
zen is the art of being at one with the two'ness |
|
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 17 2014 : 03:39:12 AM
|
Done it yet - performance is better now but the solution is not satisfying - the main problem is not solved - if I want to update symbols I must update the whole solution or file by file - and this takes very long - even on SSDs and a very fast PC. |
|
|
feline
Whole Tomato Software
United Kingdom
19025 Posts |
Posted - Sep 18 2014 : 11:53:11 PM
|
How many files do you have in your solution?
If you open VA's Open File in Solution dialog (Alt-Shift-O) the title bar contains two numbers. The first number is the number of files currently listed, which changes as you filter the list. The second number is the total number of files in the list, which is normally the number of files in your solution. What is this second number?
When you say a very very long time, can you give me an estimate of how long this is? 2 minutes? 3 hours? a week? |
zen is the art of being at one with the two'ness |
|
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 19 2014 : 02:24:56 AM
|
Roundabout 230000 Files, ~ 120 projects, update of symbol database last over an hour on an SSD (feeling, not really measured yet).
|
Edited by - ebiaccarino on Sep 19 2014 02:48:25 AM |
|
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 19 2014 : 02:49:34 AM
|
But performance is not the main issue - to many ambiguous symbols is a much bigger problem. |
|
|
foxmuldr
Tomato Guru
USA
417 Posts |
Posted - Sep 19 2014 : 07:29:51 AM
|
When VAX is disabled, how does Visual Studio itself perform with such a large number of projects and files?
Best regards, Rick C. Hodgin
|
|
|
ebiaccarino
New Member
Germany
6 Posts |
Posted - Sep 19 2014 : 08:02:24 AM
|
bad |
|
|
foxmuldr
Tomato Guru
USA
417 Posts |
Posted - Sep 19 2014 : 10:26:33 AM
|
I had written you a response the other day, but deleted it before posting waiting to see what the VAX staff said.
My thinking was this: Is it possible for you to aggregate the many projects into only those you need to access for a particular task?
For example, you have your 120 projects, 230K source files, and then you develop a simple app which allows you to select what you need to for a given task. That app would ask you for class names, modules, projects, etc., and you choose from the list, and it would create a project for you which had only that subset.
You might be able to figure out and use the NCB file created by VS itself, and to parse VAX's own sub-directories for data in some way. It would prevent you from having to duplicate the effort on your own. You could also find dependencies that way.
Such an option may not work that way for you. But, it was an idea I had when I saw how many projects and files you have.
If you don't mind my asking... what type of project is this? I believe the Linux kernel is well under 100K files, with about 16M lines of code.
Best regards, Rick C. Hodgin
|
Edited by - foxmuldr on Sep 19 2014 1:39:48 PM |
|
|
foxmuldr
Tomato Guru
USA
417 Posts |
Posted - Sep 19 2014 : 10:43:47 AM
|
Just now having a look at the .db files in the C:\\Users\\username\\AppData\\Local\\VisualAssist\\vs9_3\\ directories, for example, it seems like they could be easy enough to figure out. They're in text with some obvious layouts with field delineation characters.
Here's a sample. The � character seems like a field delineation, and the values there like 2e030db relate to the fileids.va file in the parent directory. I would think with a small project you could figure out the entire structure, and then replicate that logic through to a full-sized project without writing any parsing algorithms yourself, except using that which VAX already generates for you, and then after you're done look into the updated files for your temporary project and put those new entries back into the original files:
0�fileid:2e030db�1ce62a1.a2bee800�0c000000�20041�2e030db�0 1�:gxFontBase_8x16�u8 gxFontBase_8x16[] =�0c000004�840�2e030db�1 1�:gxFontBase_8x16�u8 gxFontBase_8x16[] ={...}�0c000004�10840�2e030db�2 1�:gxFontBase_8x16�u8 gxFontBase_8x16[] =�0c000004�10840�2e030db�103
Best regards, Rick C. Hodgin
|
Edited by - foxmuldr on Sep 19 2014 10:47:30 AM |
|
|
feline
Whole Tomato Software
United Kingdom
19025 Posts |
Posted - Sep 19 2014 : 7:28:07 PM
|
foxmuldr, trying to hack apart VA's symbol database, please, don't even think about going there. The database format changes over time, this is never going to be supported, and I don't even want to think about what might happen if you try.
ebiaccarino, would adding the ability to filter the Find Symbol dialog by Project help help enough here? This seems like a reasonable extension to VA, but I am not sure if, or how quickly this would be added to VA. Unfortunately adding this would not do anything to speed up parsing.
For now, have you considered making a "working on" solution, which just holds the projects that you are interested in, rather than all 120 projects? You would obviously still need to rely on the full project for full builds.
Is your source code broken down into separate directory trees? I recently produced a VB script file to generate VS2010 and above project files, for editing, from all C++ and C# code files in a directory tree. The solutions are not "elegant", and are not expected to compile, but they are useful to give VA a working set of files to parse, to help you with editing. Would a version of this script that output VS2008 format solution and project files help here? |
zen is the art of being at one with the two'ness |
|
|
foxmuldr
Tomato Guru
USA
417 Posts |
Posted - Sep 19 2014 : 7:45:56 PM
|
feline, how about adding a checkbox option in VA's options which says "Only scan projects found in projects.va?" and if projects.va exists, then only scan those named projects and not everything in the solution?
|
Edited by - foxmuldr on Sep 19 2014 8:16:35 PM |
|
|
feline
Whole Tomato Software
United Kingdom
19025 Posts |
Posted - Sep 19 2014 : 10:48:42 PM
|
What is "projects.va"? If you are suggesting excluding projects from being scanned by VA, then the result is no knowledge on VA's part of any of the excluded projects, and quite a lot of unknown symbols, when ever you reference a symbol from a different project.
Given the number of support enquiries about unknown symbols, I am not keen to add more unknown symbols if it can be avoided. If the main problem is searching for symbols, rather than speed, then better filtering in the Find Symbol dialog makes more sense, and sounds more widely useful. |
zen is the art of being at one with the two'ness |
|
|
foxmuldr
Tomato Guru
USA
417 Posts |
Posted - Sep 20 2014 : 06:50:37 AM
|
Projects.va would be a new file you'd support, one created by the user to indicate the names of projects to parse. You could also create an exclude file called xprojects.va (or some other name) which is a list of projects to NEVER parse. If I recall correctly you may already have a feature which does that as I seem to remember a post about excluding certain projects. I could be wrong about that though. Can't remember.
Only those developers who have conditions like the OP (where parsing everything presents an unworkable issue) would use projects.va or xprojects.va. Others would leave it as it is when standard installed. However, when projects.va exists, or xprojects.va exists, the line entries in those files would be considered and everything else would be ignored.
You could add another checkbox item which says "Ignore unknown symbols under projects.va constraint?" to prevent the unknown items from being highlighted.
Such an implementation would simply setup a new operating condition inside of VAX where everything that is known is available for consumption, but everything that is not known is recognized to be under the guise of (1) it is truly unknown, or (2) it's unknown because its definition exists in a project which is not currently parsed, and both of those are okay under this constraint. :-)
It should be a simple matter to add the projects.va and xprojects.va. In your parsing algorithm where you scan each file, do a search to see if that file is part of an included or excluded project, and if it's in one that is excluded, ignore the parsing and leave the file as it is (as though it were a blank file, or a file with only comments). In that way nothing else in your design has to change, and only this up-front algorithm about whether or not to parse each individual file is required.
Best regards, Rick C. Hodgin
|
|
|
sean
Whole Tomato Software
USA
2817 Posts |
Posted - Sep 22 2014 : 12:18:07 PM
|
This comes up often enough that we'll give it serious consideration for the short-list. case=21519 |
|
|
|
Topic |
|