都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

.NET アプリケーションの高速化について探し始めてみた - その3 - ( SuppressUnmanagedCodeSecurityAttribute属性 )

 SuppressUnmanagedCodeSecurityAttribute() って知ってますか?ネットをぼーと探していたら見つけたのですが、ここにこの属性の説明が記載されています。

 ※下記はMSDNから抜粋

// SuppressSecurity.cs
using System;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;

class NativeMethods
{
    // This is a call to unmanaged code. Executing this method requires 
    // the UnmanagedCode security permission. Without this permission,
    // an attempt to call this method will throw a SecurityException:
    /* NOTE: The SuppressUnmanagedCodeSecurityAttribute disables the
       check for the UnmanagedCode permission at runtime. Be Careful! */
    [SuppressUnmanagedCodeSecurityAttribute()]
    [DllImport("msvcrt.dll")]
    internal static extern int puts(string str);
    [SuppressUnmanagedCodeSecurityAttribute()]
    [DllImport("msvcrt.dll")]
    internal static extern int _flushall();
}

アンマネージ コードのアクセス許可のチェックが、アンマネージ メソッドの呼び出し時に毎回行われるのではなく、読み込み時に 1 回だけ行われます。アンマネージ メソッドが繰り返し呼び出される場合は、パフォーマンスが大幅に向上します。

 

こんな属性あったんですね。全然知りませんでした。セキュリティを担保できているアプリケーションであれば、使用してみるのも良いかもしれません。