不要なアセンブリのロードを回避する方法

アンドラス

ASP.NET .NET 4.6 MVC4アプリケーションは、不要なアセンブリをロードします。System.Data.OracleClient。Oracleは使用されていません。

アセンブリの依存関係は、コントローラーのコードを使用して作成されます

        var sb = new StringBuilder();
        foreach (Assembly b in AppDomain.CurrentDomain.GetAssemblies())
        {
            sb.AppendLine(b.FullName);
            foreach (AssemblyName an in b.GetReferencedAssemblies())
                sb.AppendLine("   " + an.Name);
        }

出力は以下のとおりです。このSystem.Webによると、System.Designへの参照とSystem.DesignへのSystem.Data.OracleClientへの参照

MVCアプリケーションは、メモリが限られているVPSサーバーで実行されています。不要なアセンブリがロードされないようにこれを修正するにはどうすればよいですか?これにより、VPSサーバーのメモリが解放されることを願っています。

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   mscorlib
   System.Drawing
   System
   System.Configuration
   System.Core
   System.Data
   System.Xml
   System.DirectoryServices
   System.EnterpriseServices
   System.Web.RegularExpressions
   System.Design
   System.Web.ApplicationServices
   System.ComponentModel.DataAnnotations
   System.DirectoryServices.Protocols
   System.Security
   System.Runtime.Caching
   System.ServiceProcess
   System.Web.Services
   Microsoft.Build.Utilities.v4.0
   Microsoft.Build.Framework
   Microsoft.Build.Tasks.v4.0
   System.Windows.Forms
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
   mscorlib
   System.Configuration
   System.Xml
System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
   mscorlib
   System
   System.Xml
   System.Numerics
   System.Security
System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
   mscorlib
   System
   System.Configuration
System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   mscorlib
   System
   System.Xml
   System.Security
   System.Core
System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
   mscorlib
   System
   System.Data.SqlXml
   System.Configuration
System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   mscorlib
   System
   System.Data
   System.Configuration
Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   mscorlib
   Microsoft.Build.Framework
   System
   System.Xml
   System.Core
...
System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
   mscorlib
   System.Configuration
   System.Data
   System.Transactions
   System
   System.EnterpriseServices

web.configバインディングセクションにも含まれていません。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

更新

回答に従ってweb.configにremoveコマンドを配置しようとしましたが、エラーが発生しました

ここに画像の説明を入力してください

また、を使用して回答に従ってオラクルセクションを削除しようとしました

<configuration>
  <configSections>
    <section name="system.data.oracleclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <remove name="system.data.oracleclient"></remove>
    </section>
  </configSections>
  ...

しかし、エラーが発生しました:

ここに画像の説明を入力してください

それを修正する方法は?

アリストス

Webアプリケーションには3種類のアセンブリがあります。

  1. 使用するライブラリ(dll)と一緒に来るアセンブリ
  2. Webアプリケーションのコンパイル済みバージョンであるアセンブリ
  3. サイトを運営するための主要なアセンブリ

ライブラリ

最初の1つのケースでは、ライブラリを最適化して、dllのプロジェクトで不要な参照を直接削除できます。

参照

2番目のケースでは、Webページと何をコンパイルするかを最適化するために、コードビハインドの不要な参照を削除する必要があります...たとえば、ページには通常、この最初の行があります

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

そして、あなたが使用しないものは灰色です、あなたはそれを取り除くことができます...

Webアセンブリ

そして今、難しい部分-「試行/失敗」ゲームをプレイしなければならないので難しい。これで、何をどこから削除できるか。

まず、削除するものを見つけるために検索する場所...そして答えはasp.netのグローバルweb.configにあります。私の場合、Windowsディレクトリ、現在のフレームワークバージョン、configディレクトリに移動し、web.config

そこでいくつかの鍵を見つけます。

まずセッションでパイプラインを高速化するために不要なHttpモジュールを削除できます。httpModuleweb.config

これは私がグローバルweb.configで見るものです

<httpModules>
    <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
    <add name="Session" type="System.Web.SessionState.SessionStateModule" />
    <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
    <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
    <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
    <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
    <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
    <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
    <add name="Profile" type="System.Web.Profile.ProfileModule" />
    <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
    <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

アプリケーションでweb.configにアクセスすると、使用していないものを削除できます。

<httpModules>
  <remove name="Session" />
  <remove name="PassportAuthentication" />
  <remove name="AnonymousIdentification" />
</httpModules>

さて、あなたの場合、私はアセンブリセッションを続行します。これは、グローバルweb.configに表示されるものです。

<compilation>
        <assemblies>
            <remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="mscorlib" />
            <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="*" />
            <add assembly="System.Web.WebPages.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </assemblies>

これは、web.configにコピーして貼り付け<clear />、最初の行に配置してから、プログラムが使用されていないことがわかっている行を削除し始めます...そして、この行を保持するように注意し<add assembly="*" />てください。 dllディレクトリからライブラリを追加します。

            <assemblies>
                <clear />
                <add assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
                <add assembly="mscorlib" />
                <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
....
                <add assembly="*" />
            </assemblies>

これを作成し、使用していないものを削除します。削除してアプリケーションがまだ機能しているかどうかを確認することで、使用するアセンブリを大幅に制限できます。

私は簡単なテストを行い、この行を削除します

<add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

今回ロードされたアセンブリのみを83から79まで数えます。なぜ1つ以上のマイナス?WorkflowServices彼ら自身によってもう少しロードするからです。

構成セクションから何かを削除するには、web.configで次のようにします。

<configuration> 
  <configSections>
        <remove name="system.data.oracleclient"></remove>
...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Intellij Ideaのコードのクリーンアップで不要な改行を自動的に削除する方法

分類Dev

Androidアプリのネイティブコードシンボルのストリップを回避する方法

分類Dev

Javaプログラムの効率(特に:アセンブリコード)を測定する方法は?

分類Dev

このアセンブリをAppDomainにロードする方法は?

分類Dev

リリース管理を使用するときに不要なアーティファクトのダウンロードを防止する

分類Dev

Roslynでソースコードなしでアセンブリのコンテンツを閲覧する方法

分類Dev

dotnetcoreにアセンブリを動的にロードする方法

分類Dev

既存のアセンブリコードとの競合を回避するためにCコードを作成/ビルドする方法は?

分類Dev

シングルクリックでアンドロイドスタジオで不要なすべての種類のファイルを削除する方法

分類Dev

Kephasブートストラップにアプリケーションアセンブリをロードするための異なる戦略を提供する方法

分類Dev

このアセンブリコードの流れを理解する方法

分類Dev

Reactコンポーネントの不要な再レンダリングを回避する方法

分類Dev

フック付きのコンポーネントで不要なレンダリングを回避する方法

分類Dev

Sparkスタンドアロン:sbtアセンブリとuber-jarを回避する方法は?

分類Dev

Cライブラリ関数をアセンブリにロードし、別のCまたはアセンブリプロジェクトでアセンブリライブラリ関数を使用する方法

分類Dev

applicationBase C#の外部のAppDomainにアセンブリをロードする

分類Dev

異なるバージョンのアセンブリを別のAppDomainにロードします

分類Dev

コードで.netアセンブリの依存関係を判断する方法

分類Dev

ローカルアクセスと外部アクセスの認証が異なり、ブラウザのユーザー名/パスワードプロンプトを回避する

分類Dev

Meteorメソッドを使用してファイルをアップロードする際のブロックインを回避する方法

分類Dev

このアセンブリコードがセグメンテーション違反をスローするのはなぜですか?

分類Dev

Linux上のPowerShell-.Netアセンブリをロード\使用する方法は?

分類Dev

アセンブリを動的にロードする

分類Dev

光沢のあるアプリで不要な負荷を回避する

分類Dev

アセンブリ コードを整理する方法

分類Dev

ループ内のコードブロッキングを回避する方法

分類Dev

不要なオブジェクトプロパティをクリーンアップし、laravel 5.4で必要な属性のみを抽出するLaravelコード?

分類Dev

厳密な名前のアセンブリからResourceDictionaryをロードする方法は?

分類Dev

不要なコードを回避してテーブルからコンテンツのみをフェッチする方法

Related 関連記事

  1. 1

    Intellij Ideaのコードのクリーンアップで不要な改行を自動的に削除する方法

  2. 2

    Androidアプリのネイティブコードシンボルのストリップを回避する方法

  3. 3

    Javaプログラムの効率(特に:アセンブリコード)を測定する方法は?

  4. 4

    このアセンブリをAppDomainにロードする方法は?

  5. 5

    リリース管理を使用するときに不要なアーティファクトのダウンロードを防止する

  6. 6

    Roslynでソースコードなしでアセンブリのコンテンツを閲覧する方法

  7. 7

    dotnetcoreにアセンブリを動的にロードする方法

  8. 8

    既存のアセンブリコードとの競合を回避するためにCコードを作成/ビルドする方法は?

  9. 9

    シングルクリックでアンドロイドスタジオで不要なすべての種類のファイルを削除する方法

  10. 10

    Kephasブートストラップにアプリケーションアセンブリをロードするための異なる戦略を提供する方法

  11. 11

    このアセンブリコードの流れを理解する方法

  12. 12

    Reactコンポーネントの不要な再レンダリングを回避する方法

  13. 13

    フック付きのコンポーネントで不要なレンダリングを回避する方法

  14. 14

    Sparkスタンドアロン:sbtアセンブリとuber-jarを回避する方法は?

  15. 15

    Cライブラリ関数をアセンブリにロードし、別のCまたはアセンブリプロジェクトでアセンブリライブラリ関数を使用する方法

  16. 16

    applicationBase C#の外部のAppDomainにアセンブリをロードする

  17. 17

    異なるバージョンのアセンブリを別のAppDomainにロードします

  18. 18

    コードで.netアセンブリの依存関係を判断する方法

  19. 19

    ローカルアクセスと外部アクセスの認証が異なり、ブラウザのユーザー名/パスワードプロンプトを回避する

  20. 20

    Meteorメソッドを使用してファイルをアップロードする際のブロックインを回避する方法

  21. 21

    このアセンブリコードがセグメンテーション違反をスローするのはなぜですか?

  22. 22

    Linux上のPowerShell-.Netアセンブリをロード\使用する方法は?

  23. 23

    アセンブリを動的にロードする

  24. 24

    光沢のあるアプリで不要な負荷を回避する

  25. 25

    アセンブリ コードを整理する方法

  26. 26

    ループ内のコードブロッキングを回避する方法

  27. 27

    不要なオブジェクトプロパティをクリーンアップし、laravel 5.4で必要な属性のみを抽出するLaravelコード?

  28. 28

    厳密な名前のアセンブリからResourceDictionaryをロードする方法は?

  29. 29

    不要なコードを回避してテーブルからコンテンツのみをフェッチする方法

ホットタグ

アーカイブ