0

ASP.NET MVC4 application does not use Oracle Client. List of loaded assemblies is determined using

var sb= new StringBuilder();
var i = 0;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies().Where((asm) => asm.GlobalAssemblyCache))
            {
                sb.Append(++i);
                sb.Append(' ');
                sb.AppendLine(a.FullName);
            }

Result is below. It shows that System.Data.OracleClient assembly is loaded. Solution does not contain reference to this assembly. It lookes that there are other unused assemblies such as SMDiagnostics , DataVisualization etc.

Why those are loaded ? How to find unused assemblies and disable their loading ? Web application is running is Virtual Private Server with limited RAM and not loading those hopefully frees some memory.

1 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
2 System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
3 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
4 System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
5 System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
6 System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
7 System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
8 System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
9 Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
10 Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
11 Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
12 Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
13 System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
14 System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
15 System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
16 System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
17 System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
18 System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
19 System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
20 System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
21 System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
22 System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
23 System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
24 System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
25 System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
26 System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
27 System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
28 System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
29 System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
30 System.Web.WebPages.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
31 System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
32 System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
33 System.Runtime.InteropServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
34 Microsoft.VisualStudio.Web.PageInspector.Runtime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
35 Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
36 System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
37 Microsoft.VisualStudio.Web.PageInspector.Tracing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
38 System.Web.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
39 System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
40 System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
41 System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
42 System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
43 System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
44 System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
45 System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
46 System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
47 System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
48 System.Runtime.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
49 Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
50 System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
51 SMDiagnostics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
52 Microsoft.VisualBasic.Activities.Compiler, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
53 System.Workflow.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
54 System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
55 System.Workflow.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
56 System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
57 System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
58 System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
59 Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
60 System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
61 Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
62 System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
63 System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Andrus
  • 26,339
  • 60
  • 204
  • 378
  • remove it from using statement – Mostafiz Oct 16 '16 at 17:56
  • I searched whole solution for word `oracle` and havent found any using statement. So oracle is not referenced – Andrus Oct 16 '16 at 18:04
  • That "using" statement could technically be in any of the other loaded assemblies. I suggest you check each one of these assemblies for what dependencies they may have. – Tommy Oct 16 '16 at 18:06
  • There are 63 assemblies in list from GAC. How to find which causes oracle assembly loading ? – Andrus Oct 16 '16 at 18:08
  • Application is running from Visual Studio. Maybe Visual Studio has some tool which shows why Oracle is loaded ? – Andrus Oct 16 '16 at 18:12
  • That shall be simple, you can use the dependency walker to know the complete dll list or you check this http://stackoverflow.com/questions/15113352/find-out-dependencies-of-all-dlls You may recursively call `Assembly.GetReferencedAssemblies()` – Mrinal Kamboj Oct 16 '16 at 18:16
  • *How to find which causes oracle assembly loading* Google, MSDN, you can get creative here. In all honesty, if you are running on a tight memory budget, you will most likely get more mileage out of profiling your own application for memory leaks, inefficient variable usages, etc :) – Tommy Oct 16 '16 at 18:16
  • Also not sure what part of your code is trying to get the loaded assemblies, these might be referenced assemblies, as they all get an entry in the manifest post compilation – Mrinal Kamboj Oct 16 '16 at 18:20
  • @MrinalKamboj I tried but dependency walker lists only windows native dll files. It show error and does not list any managed assembly. How to create code which shows where oracle is referenced. Should it loop over all loaded assemblies and call GetReferencedAssemblies for each of them ? – Andrus Oct 16 '16 at 18:24
  • You may try 'Assembly Binding Log Viewer' (Fuslogvw.exe) to see failed and successful assembly bindings including who requested. With `GetReferencedAssemblies` you only discover static references, but not dynamic assembly loading. – Honza Oct 16 '16 at 18:53
  • Create new appdomain and load only what you need. Can be done in xml or code – Yuri S Oct 16 '16 at 18:55
  • Using GetReferencedAssemblies I found that `System.Web` references `System.Desing` and `System.Design` references this Oracle assembly. So it looks like Orace dependency cannot removed even in new appdomain since System.Web is required in MVC4 – Andrus Oct 16 '16 at 20:06
  • @Andrus, please review he following: http://stackoverflow.com/questions/458362/how-do-i-list-all-loaded-assemblies http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies – Mrinal Kamboj Oct 17 '16 at 06:56
  • Also I am little perplexed, `System.Web` and `System.Design` have no business to load `System.Data.OracleClient`, in fact they have no business to even load `System.Data`, could you please review manifest using `Ildasm`, to understand the references – Mrinal Kamboj Oct 17 '16 at 06:58
  • I posted this as separate question in http://stackoverflow.com/questions/40082667/how-to-avoid-loading-unnessecary-assemblies – Andrus Oct 17 '16 at 09:23

0 Answers0