{"id":2012,"date":"2024-12-27T13:44:29","date_gmt":"2024-12-27T04:44:29","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2012"},"modified":"2025-03-24T08:48:58","modified_gmt":"2025-03-23T23:48:58","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91c%e3%81%aedispose%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95%e3%81%a85%e3%81%a4%e3%81%ae%e9%87%8d%e8%a6%81","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2012","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011C#\u306eDispose\u30d1\u30bf\u30fc\u30f3\u5b9f\u88c5\u65b9\u6cd5\u30685\u3064\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u306f\u3058\u3081\u306b<\/a>  <\/li>  <li>    <a href=\"#i-1\">Dispose\u30d1\u30bf\u30fc\u30f3\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u91cd\u8981\u6027\u3068Dispose\u306e\u5f79\u5272<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-4\">IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u57fa\u672c\u6982\u5ff5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u5fb9\u5e95\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u57fa\u672c\u7684\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">SafeHandle\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u5b9f\u8df5\u3067\u5f79\u7acb\u3064Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3068\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u9055\u3044<\/a>      <\/li>      <li>        <a href=\"#i-16\">using\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u9069\u5207\u306a\u30ea\u30bd\u30fc\u30b9\u89e3\u653e<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308bDispose\u306e\u6ce8\u610f\u70b9<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u7d99\u627f\u6642\u306eDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306eDispose\u51e6\u7406\u306e\u691c\u8a3c\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-23\">\u3088\u304f\u3042\u308bDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u30df\u30b9\u3068\u5bfe\u7b56<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u5f15\u304d\u8d77\u3053\u3059\u5178\u578b\u7684\u306a\u30df\u30b9<\/a>      <\/li>      <li>        <a href=\"#i-27\">Dispose\u306e\u4e8c\u91cd\u547c\u3073\u51fa\u3057\u306b\u3088\u308b\u554f\u984c<\/a>      <\/li>      <li>        <a href=\"#i-30\">\u4f8b\u5916\u51e6\u7406\u3068Dispose\u306e\u95a2\u4fc2\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-33\">\u5b9f\u88c5\u30df\u30b9\u9632\u6b62\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-34\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-35\">\u6027\u80fd\u3092\u8003\u616e\u3057\u305fDispose\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-38\">\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3067\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-40\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-43\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u307e\u3068\u3081<\/a>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u306f\u3058\u3081\u306b<\/h2>\n\n\n\n<p>C#\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306b\u304a\u3044\u3066\u3001Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u5207\u306a\u5b9f\u88c5\u306f\u9ad8\u54c1\u8cea\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u8981\u3068\u306a\u308a\u307e\u3059\u3002<br>\u672c\u8a18\u4e8b\u3067\u306f\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u304e\u3001\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u3001Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u672c\u8a18\u4e8b\u3067\u5b66\u3079\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p class=\"is-style-sango-paragraph-idea-alt\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u57fa\u672c\u6982\u5ff5\u3068IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30de\u30cd\u30fc\u30b8\u30c9\/\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u89e3\u653e\u65b9\u6cd5<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u7d99\u627f\u3084\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u4e00\u822c\u7684\u306a\u5b9f\u88c5\u30df\u30b9\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3092\u901a\u3058\u305f\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u7406\u89e3<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">Dispose\u30d1\u30bf\u30fc\u30f3\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u91cd\u8981\u6027\u3068Dispose\u306e\u5f79\u5272<\/h3>\n\n\n\n<p>C#\u306b\u304a\u3051\u308b\u30e1\u30e2\u30ea\u7ba1\u7406\u306f\u3001\u4e3b\u306b\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\uff08GC\uff09\u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3084\u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30eb\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30bd\u30b1\u30c3\u30c8\u306a\u3069\u306e<strong>\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9<\/strong>\u306f\u3001GC\u3060\u3051\u3067\u306f\u9069\u5207\u306b\u89e3\u653e\u3067\u304d\u307e\u305b\u3093\u3002<br>\u3053\u308c\u3089\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u78ba\u5b9f\u306b\u89e3\u653e\u3059\u308b\u305f\u3081\u306b\u3001C#\u3067\u306f<strong>Dispose\u30d1\u30bf\u30fc\u30f3<\/strong>\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">Dispose\u306e\u4e3b\u306a\u5f79\u5272<\/h4>\n\n\n\n<ol class=\"wp-block-list is-style-sango-list-circle\">\n<li>\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u306e\u78ba\u5b9f\u306a\u89e3\u653e<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7dad\u6301<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u306e\u9069\u5207\u306a\u7d42\u4e86\u51e6\u7406<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u57fa\u672c\u6982\u5ff5<\/h3>\n\n\n\n<p>IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u4fdd\u6301\u3059\u308b\u30ea\u30bd\u30fc\u30b9\u3092\u660e\u793a\u7684\u306b\u89e3\u653e\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96\u7684\u306a\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseConnection : IDisposable\n{\n    private bool disposed = false;\n    private SqlConnection connection;\n    private IntPtr handle;  \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u4f8b\n\n    [DllImport(\"kernel32.dll\", SetLastError=true)]\n    private static extern bool CloseHandle(IntPtr handle);\n\n    public DatabaseConnection(string connectionString)\n    {\n        connection = new SqlConnection(connectionString);\n    }\n\n    \/\/ IDisposable\u306e\u5b9f\u88c5\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u53ef\u80fd\u306a\u4eee\u60f3\u30e1\u30bd\u30c3\u30c9\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n                if (connection != null)\n                {\n                    connection.Dispose();\n                    connection = null;\n                }\n            }\n\n            \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09\n            if (handle != IntPtr.Zero)\n            {\n                \/\/ Windows API\u306e\u30cf\u30f3\u30c9\u30eb\u3092\u89e3\u653e\u3059\u308b\u4f8b\n                CloseHandle(handle);\n                handle = IntPtr.Zero;\n            }\n\n            disposed = true;\n        }\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff08\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\uff09\n    ~DatabaseConnection()\n    {\n        Dispose(false);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">\u5b9f\u969b\u306e\u4f7f\u7528\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ using \u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306b\u3088\u308b\u81ea\u52d5\u7684\u306aDispose\nusing (var db = new DatabaseConnection(\"connection_string\"))\n{\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n}  \/\/ \u30d6\u30ed\u30c3\u30af\u3092\u629c\u3051\u308b\u3068\u81ea\u52d5\u7684\u306bDispose\u304c\u547c\u3070\u308c\u308b\n\n\/\/ \u307e\u305f\u306f\u660e\u793a\u7684\u306aDispose\nvar db = new DatabaseConnection(\"connection_string\");\ntry\n{\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n}\nfinally\n{\n    db.Dispose();  \/\/ \u660e\u793a\u7684\u306a\u89e3\u653e\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\uff08SqlConnection\uff09\u3068\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\uff08Windows API\u306e\u30cf\u30f3\u30c9\u30eb\uff09\u306e\u4e21\u65b9\u3092\u9069\u5207\u306b\u89e3\u653e\u3059\u308b\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<br>\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306f\u901a\u5e38\u3001Windows\u306eAPI\u3084\u30cd\u30a4\u30c6\u30a3\u30d6\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u76f8\u4e92\u904b\u7528\u6642\u306b\u4f7f\u7528\u3055\u308c\u308b\u30dd\u30a4\u30f3\u30bf\u3084\u30cf\u30f3\u30c9\u30eb\u306a\u3069\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list is-style-sango-list-yubi\">\n<li><strong>disposed \u30d5\u30e9\u30b0<\/strong>\uff1a\u4e8c\u91cd\u89e3\u653e\u3092\u9632\u3050\u305f\u3081\u306e\u30d5\u30e9\u30b0<\/li>\n\n\n\n<li><strong>Dispose()\u30e1\u30bd\u30c3\u30c9<\/strong>\uff1a\u5916\u90e8\u304b\u3089\u547c\u3073\u51fa\u3055\u308c\u308b\u516c\u958b\u30e1\u30bd\u30c3\u30c9<\/li>\n\n\n\n<li><strong>Dispose(bool)\u30e1\u30bd\u30c3\u30c9<\/strong>\uff1a\u5b9f\u969b\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u3092\u884c\u3046\u4fdd\u8b77\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9<\/li>\n\n\n\n<li><strong>\u30c7\u30b9\u30c8\u30e9\u30af\u30bf<\/strong>\uff1a\u6700\u5f8c\u306e\u7826\u3068\u3057\u3066\u6a5f\u80fd\u3059\u308b\u89e3\u653e\u51e6\u7406<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u30e1\u30ea\u30c3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p class=\"is-style-sango-paragraph-good-alt\">\u30ea\u30bd\u30fc\u30b9\u306e\u78ba\u5b9f\u306a\u89e3\u653e<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u5411\u4e0a<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u4e88\u6e2c\u53ef\u80fd\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/p>\n<\/div><\/div>\n\n\n\n<p>\u521d\u5fc3\u8005\u306e\u65b9\u306f\u3001\u307e\u305ausing\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u304b\u3089\u59cb\u3081\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u3088\u308a\u8907\u96d1\u306a\u30b7\u30ca\u30ea\u30aa\u306b\u5fdc\u3058\u3066\u3001\u5b8c\u5168\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u306b\u9032\u3080\u3053\u3068\u3067\u3001\u6bb5\u968e\u7684\u306b\u7406\u89e3\u3092\u6df1\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u5fb9\u5e95\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u57fa\u672c\u7684\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u624b\u9806<\/h3>\n\n\n\n<p>Dispose\u30d1\u30bf\u30fc\u30f3\u3092\u6b63\u3057\u304f\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceManager : IDisposable\n{\n    private bool _disposed = false;  \/\/ Dispose\u6e08\u307f\u304b\u3069\u3046\u304b\u3092\u8ffd\u8de1\n    private ManagedResource _managed;     \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\n    private IntPtr _unmanagedHandle;      \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\n\n    public ResourceManager()\n    {\n        _managed = new ManagedResource();\n        _unmanagedHandle = NativeMethods.CreateHandle();\n    }\n\n    \/\/ \u30d1\u30d6\u30ea\u30c3\u30af\u306aDispose\u30e1\u30bd\u30c3\u30c9\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    \/\/ \u4fdd\u8b77\u3055\u308c\u305fDispose\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n                if (_managed != null)\n                {\n                    _managed.Dispose();\n                    _managed = null;\n                }\n            }\n\n            \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            if (_unmanagedHandle != IntPtr.Zero)\n            {\n                NativeMethods.CloseHandle(_unmanagedHandle);\n                _unmanagedHandle = IntPtr.Zero;\n            }\n\n            _disposed = true;\n        }\n    }\n\n    \/\/ \u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\n    ~ResourceManager()\n    {\n        Dispose(false);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3068Dispose\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u3044\u5206\u3051<\/h4>\n\n\n\n<p>\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3068Dispose\u30e1\u30bd\u30c3\u30c9\u306b\u306f\u3001\u305d\u308c\u305e\u308c\u7570\u306a\u308b\u5f79\u5272\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceExample\n{\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u5fc5\u8981\u306a\u30b1\u30fc\u30b9\uff1a\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\n    public class UnmanagedResourceHolder : IDisposable\n    {\n        private IntPtr _handle;\n        private bool _disposed = false;\n\n        public UnmanagedResourceHolder()\n        {\n            _handle = NativeMethods.CreateHandle();\n        }\n\n        \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff1a\u6700\u5f8c\u306e\u7826\u3068\u3057\u3066\u6a5f\u80fd\n        ~UnmanagedResourceHolder()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_disposed)\n            {\n                if (_handle != IntPtr.Zero)\n                {\n                    NativeMethods.CloseHandle(_handle);\n                    _handle = IntPtr.Zero;\n                }\n                _disposed = true;\n            }\n        }\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u4e0d\u8981\u306a\u30b1\u30fc\u30b9\uff1a\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u307f\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\n    public class ManagedResourceHolder : IDisposable\n    {\n        private SqlConnection _connection;\n        private bool _disposed = false;\n\n        public void Dispose()\n        {\n            if (!_disposed)\n            {\n                if (_connection != null)\n                {\n                    _connection.Dispose();\n                    _connection = null;\n                }\n                _disposed = true;\n            }\n        }\n        \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u306f\u4e0d\u8981\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">SafeHandle\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>SafeHandle\u306f\u3001\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u5b89\u5168\u306b\u6271\u3046\u305f\u3081\u306e\u62bd\u8c61\u30af\u30e9\u30b9\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CustomFileHandle : SafeHandle\n{\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306f\u7121\u52b9\u306a\u30cf\u30f3\u30c9\u30eb\u5024\u3092\u6307\u5b9a\n    public CustomFileHandle() : base(IntPtr.Zero, true)\n    {\n    }\n\n    public override bool IsInvalid\n    {\n        get { return handle == IntPtr.Zero; }\n    }\n\n    \/\/ SafeHandle\u304c\u81ea\u52d5\u7684\u306b\u547c\u3073\u51fa\u3059\u30e1\u30bd\u30c3\u30c9\n    protected override bool ReleaseHandle()\n    {\n        if (!IsInvalid)\n        {\n            \/\/ \u30cf\u30f3\u30c9\u30eb\u306e\u89e3\u653e\u51e6\u7406\n            bool result = NativeMethods.CloseHandle(handle);\n            handle = IntPtr.Zero;\n            return result;\n        }\n        return true;\n    }\n}\n\n\/\/ SafeHandle\u306e\u4f7f\u7528\u4f8b\npublic class FileWrapper : IDisposable\n{\n    private CustomFileHandle _handle;\n    private bool _disposed = false;\n\n    public FileWrapper(string path)\n    {\n        _handle = NativeMethods.CreateFile(path);\n    }\n\n    public void Dispose()\n    {\n        if (!_disposed)\n        {\n            if (_handle != null)\n            {\n                _handle.Dispose();\n                _handle = null;\n            }\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">SafeHandle\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list is-style-sango-list-chevron\">\n<li>\u6c7a\u5b9a\u7684\u306a\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u5b89\u5168\u306a\u30cf\u30f3\u30c9\u30eb\u89e3\u653e\u306e\u4fdd\u8a3c<\/li>\n\n\n\n<li>\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\u30fc\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30cf\u30f3\u30c9\u30eb\u306e\u91cd\u8907\u89e3\u653e\u306e\u9632\u6b62<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u5b9f\u88c5\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\">\n<li><strong>Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u4e00\u8cab\u6027<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u5e38\u306bdisposed\u30d5\u30e9\u30b0\u3092\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u5fc5\u305aDispose\u306e\u4e8c\u91cd\u547c\u3073\u51fa\u3057\u306b\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u7d99\u627f\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u9806\u5e8f<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u5148\u306b\u89e3\u653e<\/li>\n\n\n\n<li>\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u5f8c\u306b\u89e3\u653e<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u3092\u8003\u616e\u3057\u305f\u89e3\u653e\u9806\u5e8f<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4f8b\u5916\u51e6\u7406<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>Dispose\u5185\u3067\u306f\u4f8b\u5916\u3092\u6291\u5236<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306f\u5fc5\u305a\u5b9f\u884c<\/li>\n\n\n\n<li>\u72b6\u614b\u306e\u6574\u5408\u6027\u3092\u7dad\u6301<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<p>\u3053\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u3092\u571f\u53f0\u3068\u3057\u3066\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u5b9f\u8df5\u7684\u306a\u91cd\u8981\u30dd\u30a4\u30f3\u30c8\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u5b9f\u8df5\u3067\u5f79\u7acb\u3064Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3068\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u9055\u3044<\/h3>\n\n\n\n<p>\u30ea\u30bd\u30fc\u30b9\u306e\u7a2e\u985e\u306b\u3088\u3063\u3066\u9069\u5207\u306a\u7ba1\u7406\u65b9\u6cd5\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u7ba1\u7406\u65b9\u6cd5\u306e\u9055\u3044<\/h4>\n\n\n\n<ol class=\"wp-block-list is-style-sango-list-stitch-blue\">\n<li><strong>\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-chevron\">\n<li>.NET Framework\/Core \u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9<\/li>\n\n\n\n<li>GC\u306e\u5bfe\u8c61\u3068\u306a\u308b<\/li>\n\n\n\n<li>\u4f8b\uff1a<code>SqlConnection<\/code>, <code>FileStream<\/code>, <code>MemoryStream<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>.NET Framework\/Core \u306e\u5916\u90e8\u3067\u7ba1\u7406\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9<\/li>\n\n\n\n<li>GC\u306e\u5bfe\u8c61\u3068\u306a\u3089\u306a\u3044<\/li>\n\n\n\n<li>\u4f8b\uff1aWindows API\u306e\u30cf\u30f3\u30c9\u30eb\u3001\u30cd\u30a4\u30c6\u30a3\u30d6\u30e1\u30e2\u30ea\u3001\u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30eb<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceHandler : IDisposable\n{\n    \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\n    private SqlConnection _sqlConnection;\n    private MemoryStream _memoryStream;\n\n    \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\n    private IntPtr _fileHandle;\n    private SafeFileHandle _safeFileHandle;\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n                if (_sqlConnection != null)\n                {\n                    _sqlConnection.Dispose();\n                    _sqlConnection = null;\n                }\n                if (_memoryStream != null)\n                {\n                    _memoryStream.Dispose();\n                    _memoryStream = null;\n                }\n            }\n\n            \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            if (_fileHandle != IntPtr.Zero)\n            {\n                NativeMethods.CloseHandle(_fileHandle);\n                _fileHandle = IntPtr.Zero;\n            }\n            _safeFileHandle?.Dispose();\n\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">using\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u9069\u5207\u306a\u30ea\u30bd\u30fc\u30b9\u89e3\u653e<\/h3>\n\n\n\n<p>using\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306f\u3001\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u3092\u5b89\u5168\u304b\u3064\u7c21\u6f54\u306b\u884c\u3046\u305f\u3081\u306e\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u5f93\u6765\u306eusing\u6587<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public void ProcessFile(string path)\n{\n    using (var fileStream = new FileStream(path, FileMode.Open))\n    using (var reader = new StreamReader(fileStream))\n    {\n        string content = reader.ReadToEnd();\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\n    }\n} \/\/ \u3053\u3053\u3067\u81ea\u52d5\u7684\u306bDispose\u304c\u547c\u3070\u308c\u308b<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">C# 8.0\u4ee5\u964d\u306eusing\u5ba3\u8a00<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public void ModernProcessFile(string path)\n{\n    using var fileStream = new FileStream(path, FileMode.Open);\n    using var reader = new StreamReader(fileStream);\n    string content = reader.ReadToEnd();\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\n} \/\/ \u30e1\u30bd\u30c3\u30c9\u306e\u7d42\u308f\u308a\u3067\u81ea\u52d5\u7684\u306bDispose\u304c\u547c\u3070\u308c\u308b<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">\u975e\u540c\u671f\u51e6\u7406\u3067\u306eusing<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public async Task ProcessFileAsync(string path)\n{\n    await using var fileStream = new FileStream(path, FileMode.Open);\n    await using var reader = new StreamReader(fileStream);\n    string content = await reader.ReadToEndAsync();\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308bDispose\u306e\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u51e6\u7406\u3092\u542b\u3080\u30af\u30e9\u30b9\u3067\u306f\u3001<code>IAsyncDisposable<\/code>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5\u3092\u691c\u8a0e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AsyncResourceManager : IAsyncDisposable, IDisposable\n{\n    private SqlConnection _connection;\n    private bool _disposed;\n\n    public async ValueTask DisposeAsync()\n    {\n        if (!_disposed)\n        {\n            if (_connection != null)\n            {\n                await _connection.DisposeAsync();\n                _connection = null;\n            }\n\n            _disposed = true;\n        }\n    }\n\n    \/\/ \u540c\u671f\u7684\u306aDispose\u3082\u5b9f\u88c5\n    public void Dispose()\n    {\n        if (!_disposed)\n        {\n            _connection?.Dispose();\n            _connection = null;\n            _disposed = true;\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\npublic async Task ProcessDataAsync()\n{\n    await using var manager = new AsyncResourceManager();\n    \/\/ \u975e\u540c\u671f\u51e6\u7406\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u7d99\u627f\u6642\u306eDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u57fa\u5e95\u30af\u30e9\u30b9\u3068\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u306eDispose\u30d1\u30bf\u30fc\u30f3\u306e\u6b63\u3057\u3044\u5b9f\u88c5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class BaseResource : IDisposable\n{\n    private bool _disposed = false;\n    protected IntPtr _handle;\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            }\n\n            \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            if (_handle != IntPtr.Zero)\n            {\n                NativeMethods.CloseHandle(_handle);\n                _handle = IntPtr.Zero;\n            }\n\n            _disposed = true;\n        }\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n}\n\npublic class DerivedResource : BaseResource\n{\n    private bool _disposed = false;\n    private SqlConnection _connection;\n\n    protected override void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u89e3\u653e\n                if (_connection != null)\n                {\n                    _connection.Dispose();\n                    _connection = null;\n                }\n            }\n\n            _disposed = true;\n        }\n\n        \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306eDispose\u3092\u547c\u3073\u51fa\u3059\n        base.Dispose(disposing);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306eDispose\u51e6\u7406\u306e\u691c\u8a3c\u65b9\u6cd5<\/h3>\n\n\n\n<p>Dispose\u306e\u5b9f\u88c5\u3092\u78ba\u5b9f\u306b\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306e\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[TestClass]\npublic class ResourceManagerTests\n{\n    [TestMethod]\n    public void Dispose_ShouldReleaseAllResources()\n    {\n        \/\/ Arrange\n        var resource = new ResourceManager();\n        var isResourceActive = true;\n\n        \/\/ Act\n        resource.Dispose();\n\n        \/\/ Assert\n        Assert.IsFalse(resource.IsResourceActive);\n        Assert.IsNull(resource.ManagedResource);\n    }\n\n    [TestMethod]\n    public async Task DisposeAsync_ShouldReleaseAllResources()\n    {\n        \/\/ Arrange\n        var resource = new AsyncResourceManager();\n\n        \/\/ Act\n        await resource.DisposeAsync();\n\n        \/\/ Assert\n        Assert.IsFalse(resource.IsResourceActive);\n    }\n\n    [TestMethod]\n    public void Dispose_ShouldHandleMultipleCalls()\n    {\n        \/\/ Arrange\n        var resource = new ResourceManager();\n\n        \/\/ Act &amp; Assert\n        resource.Dispose();\n        resource.Dispose(); \/\/ 2\u56de\u76ee\u306e\u547c\u3073\u51fa\u3057\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\n    }\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:#ffb36b;color:#FFF\" class=\"sgb-box-simple__title\">\u91cd\u8981\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:#ffb36b;background-color:#FFF\">\n<ol class=\"wp-block-list is-style-sango-list-check\">\n<li>\u30ea\u30bd\u30fc\u30b9\u304c\u6b63\u3057\u304f\u89e3\u653e\u3055\u308c\u308b\u3053\u3068\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u4e8c\u91cdDispose\u306e\u5b89\u5168\u6027\u78ba\u8a8d<\/li>\n\n\n\n<li>\u975e\u540c\u671fDispose\u306e\u52d5\u4f5c\u78ba\u8a8d<\/li>\n\n\n\n<li>\u7d99\u627f\u6642\u306e\u6b63\u3057\u3044\u89e3\u653e\u9806\u5e8f\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u4f8b\u5916\u767a\u751f\u6642\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u78ba\u8a8d<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u62bc\u3055\u3048\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-23\">\u3088\u304f\u3042\u308bDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u30df\u30b9\u3068\u5bfe\u7b56<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u5f15\u304d\u8d77\u3053\u3059\u5178\u578b\u7684\u306a\u30df\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">1. <strong>\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306e\u672a\u89e3\u9664<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class EventLeakExample : IDisposable\n{\n    private Timer _timer;\n    private bool _disposed = false;\n\n    public EventLeakExample()\n    {\n        _timer = new Timer(1000);\n        _timer.Elapsed += Timer_Elapsed;\n    }\n\n    private void Timer_Elapsed(object sender, ElapsedEventArgs e)\n    {\n        \/\/ \u30bf\u30a4\u30de\u30fc\u51e6\u7406\n    }\n\n    \/\/ \u274c \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\uff1a\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u89e3\u9664\u305b\u305a\u306bDispose\u3057\u3066\u3044\u308b\n    protected virtual void WrongDispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                if (_timer != null)\n                {\n                    _timer.Dispose();  \/\/ \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u304c\u89e3\u9664\u3055\u308c\u3066\u3044\u306a\u3044\n                    _timer = null;\n                }\n            }\n            _disposed = true;\n        }\n    }\n\n    \/\/ \u2705 \u6b63\u3057\u3044\u5b9f\u88c5\uff1aDispose\u6642\u306b\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u89e3\u9664\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                if (_timer != null)\n                {\n                    _timer.Elapsed -= Timer_Elapsed;  \/\/ \u91cd\u8981\uff1a\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u89e3\u9664\n                    _timer.Dispose();\n                    _timer = null;\n                }\n            }\n            _disposed = true;\n        }\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">2. <strong>\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u5185\u306eDisposable\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u672a\u89e3\u653e<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CollectionLeakExample : IDisposable\n{\n    private List&lt;IDisposable&gt; _resources = new List&lt;IDisposable&gt;();\n    private bool _disposed = false;\n\n    \/\/ \u274c \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\uff1a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u89e3\u653e\u3055\u308c\u306a\u3044\n    protected virtual void WrongDispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                _resources = null;  \/\/ \u5358\u306a\u308b\u53c2\u7167\u306e\u89e3\u9664\u3060\u3051\n            }\n            _disposed = true;\n        }\n    }\n\n    \/\/ \u2705 \u6b63\u3057\u3044\u5b9f\u88c5\uff1a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u5185\u306e\u5404\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u89e3\u653e\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                if (_resources != null)\n                {\n                    foreach (var resource in _resources)\n                    {\n                        if (resource != null)\n                        {\n                            resource.Dispose();\n                        }\n                    }\n                    _resources.Clear();\n                    _resources = null;\n                }\n            }\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">Dispose\u306e\u4e8c\u91cd\u547c\u3073\u51fa\u3057\u306b\u3088\u308b\u554f\u984c<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">1. <strong>\u30ea\u30bd\u30fc\u30b9\u306e\u4e8c\u91cd\u89e3\u653e\u306b\u3088\u308b\u4f8b\u5916<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DoubleDisposeExample : IDisposable\n{\n    private SqlConnection _connection;\n    private bool _disposed = false;\n\n    \/\/ \u274c \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\uff1a\u4e8c\u91cd\u89e3\u653e\u30c1\u30a7\u30c3\u30af\u304c\u306a\u3044\n    public void WrongDispose()\n    {\n        _connection.Dispose();  \/\/ 2\u56de\u76ee\u306e\u547c\u3073\u51fa\u3057\u3067\u4f8b\u5916\u767a\u751f\u306e\u53ef\u80fd\u6027\n    }\n\n    \/\/ \u2705 \u6b63\u3057\u3044\u5b9f\u88c5\uff1a\u4e8c\u91cd\u89e3\u653e\u3092\u9632\u6b62\n    public void Dispose()\n    {\n        if (!_disposed)\n        {\n            if (_connection != null)\n            {\n                _connection.Dispose();\n                _connection = null;\n            }\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">2. <strong>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ThreadSafeDisposeExample : IDisposable\n{\n    private readonly object _lock = new object();\n    private bool _disposed = false;\n    private SqlConnection _connection;\n\n    \/\/ \u2705 \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    protected virtual void Dispose(bool disposing)\n    {\n        lock (_lock)  \/\/ \u540c\u671f\u5316\n        {\n            if (!_disposed)\n            {\n                if (disposing)\n                {\n                    if (_connection != null)\n                    {\n                        _connection.Dispose();\n                        _connection = null;\n                    }\n                }\n                _disposed = true;\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u4f8b\u5916\u51e6\u7406\u3068Dispose\u306e\u95a2\u4fc2\u6027<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">1. <strong>\u4f8b\u5916\u767a\u751f\u6642\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u6f0f\u308c<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ExceptionHandlingExample\n{\n    \/\/ \u274c \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\uff1a\u4f8b\u5916\u767a\u751f\u6642\u306b\u30ea\u30bd\u30fc\u30b9\u304c\u89e3\u653e\u3055\u308c\u306a\u3044\n    public void WrongMethod()\n    {\n        var resource = new SqlConnection();\n        resource.Open();  \/\/ \u4f8b\u5916\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\n        \/\/ \u51e6\u7406\n        resource.Dispose();  \/\/ \u4f8b\u5916\u767a\u751f\u6642\u306f\u3053\u3053\u307e\u3067\u5230\u9054\u3057\u306a\u3044\n    }\n\n    \/\/ \u2705 \u6b63\u3057\u3044\u5b9f\u88c5\uff1atry-finally\u3067\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u3092\u4fdd\u8a3c\n    public void CorrectMethod()\n    {\n        var resource = new SqlConnection();\n        try\n        {\n            resource.Open();\n            \/\/ \u51e6\u7406\n        }\n        finally\n        {\n            resource.Dispose();\n        }\n    }\n\n    \/\/ \u2705 \u3055\u3089\u306b\u826f\u3044\u5b9f\u88c5\uff1ausing\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\n    public void BestMethod()\n    {\n        using var resource = new SqlConnection();\n        resource.Open();\n        \/\/ \u51e6\u7406\n    }  \/\/ \u81ea\u52d5\u7684\u306bDispose\u304c\u547c\u3070\u308c\u308b\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">2. <strong>\u975e\u540c\u671f\u64cd\u4f5c\u3067\u306e\u4f8b\u5916\u51e6\u7406<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AsyncExceptionExample\n{\n    \/\/ \u2705 \u975e\u540c\u671f\u64cd\u4f5c\u3067\u306e\u6b63\u3057\u3044\u5b9f\u88c5\n    public async Task ProcessAsync()\n    {\n        await using var resource = new AsyncResourceManager();\n        try\n        {\n            await resource.InitializeAsync();\n            \/\/ \u975e\u540c\u671f\u51e6\u7406\n        }\n        catch (Exception ex)\n        {\n            \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n            throw;\n        }\n    }  \/\/ \u81ea\u52d5\u7684\u306bDisposeAsync\u304c\u547c\u3070\u308c\u308b\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-33\">\u5b9f\u88c5\u30df\u30b9\u9632\u6b62\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list is-style-sango-list-stitch-orange\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30c1\u30a7\u30c3\u30af\u9805\u76ee<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>IDisposable\u306e\u6b63\u3057\u3044\u5b9f\u88c5<\/li>\n\n\n\n<li>disposed\u30d5\u30e9\u30b0\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>null\u30c1\u30a7\u30c3\u30af\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>\u4e8c\u91cd\u89e3\u653e\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306e\u89e3\u9664<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u9ad8\u5ea6\u306a\u30c1\u30a7\u30c3\u30af\u9805\u76ee<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u89e3\u653e<\/li>\n\n\n\n<li>\u7d99\u627f\u6642\u306e\u57fa\u5e95\u30af\u30e9\u30b9Dispose\u306e\u547c\u3073\u51fa\u3057<\/li>\n\n\n\n<li>\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u5185\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e<\/li>\n\n\n\n<li>\u4f8b\u5916\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u30df\u30b9\u3092\u610f\u8b58\u3057\u3001\u9069\u5207\u306a\u5bfe\u7b56\u3092\u8b1b\u3058\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-34\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-35\">\u6027\u80fd\u3092\u8003\u616e\u3057\u305fDispose\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">1. <strong>\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff08\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\uff09\u306e\u9069\u5207\u306a\u4f7f\u7528<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OptimizedResource : IDisposable\n{\n    private bool _disposed = false;\n    private IntPtr _handle;\n    private SafeHandle _safeHandle;\n    private readonly CancellationTokenSource _cts;\n\n    public OptimizedResource()\n    {\n        _handle = NativeMethods.CreateHandle();\n        _cts = new CancellationTokenSource();\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff08\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\uff09\u306f\u672c\u5f53\u306b\u5fc5\u8981\u306a\u5834\u5408\u306e\u307f\u5b9f\u88c5\n    \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u76f4\u63a5\u4fdd\u6301\u3059\u308b\u5834\u5408\u306e\u307f\u5fc5\u8981\n    ~OptimizedResource()\n    {\n        Dispose(false);\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        \/\/ \u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\u3092\u6291\u5236\uff08GC\u306e\u8ca0\u8377\u8efd\u6e1b\uff09\n        GC.SuppressFinalize(this);\n    }\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                \/\/ \u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\uff08\u9ad8\u901f\u306a\u9806\u306b\u5b9f\u884c\uff09\n                if (_cts != null)\n                {\n                    _cts.Cancel();\n                    _cts.Dispose();\n                    _cts = null;\n                }\n                if (_safeHandle != null)\n                {\n                    _safeHandle.Dispose();\n                    _safeHandle = null;\n                }\n            }\n\n            \/\/ \u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            if (_handle != IntPtr.Zero)\n            {\n                NativeMethods.CloseHandle(_handle);\n                _handle = IntPtr.Zero;\n            }\n\n            _disposed = true;\n        }\n    }\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u72b6\u614b\u30c1\u30a7\u30c3\u30af\u3092\u542b\u3080\u30e1\u30bd\u30c3\u30c9\n    protected void ThrowIfDisposed()\n    {\n        if (_disposed)\n        {\n            throw new ObjectDisposedException(nameof(OptimizedResource));\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">2. <strong>\u975e\u540c\u671f\u64cd\u4f5c\u306e\u6700\u9069\u5316<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OptimizedAsyncResource : IAsyncDisposable, IDisposable\n{\n    private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);\n    private bool _disposed;\n\n    \/\/ \u975e\u540c\u671f\u64cd\u4f5c\u306b\u6700\u9069\u5316\u3055\u308c\u305fDispose\u30d1\u30bf\u30fc\u30f3\n    public async ValueTask DisposeAsync()\n    {\n        if (_disposed)\n        {\n            return;\n        }\n\n        await _semaphore.WaitAsync().ConfigureAwait(false);\n        try\n        {\n            if (!_disposed)\n            {\n                \/\/ \u975e\u540c\u671f\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n                await DisposeAsyncCore().ConfigureAwait(false);\n\n                \/\/ \u540c\u671f\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n                Dispose(true);\n\n                _disposed = true;\n            }\n        }\n        finally\n        {\n            _semaphore.Release();\n        }\n    }\n\n    protected virtual async ValueTask DisposeAsyncCore()\n    {\n        \/\/ \u975e\u540c\u671f\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\u51e6\u7406\n        await Task.CompletedTask.ConfigureAwait(false);\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                _semaphore.Dispose();\n            }\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3067\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ec\u30d3\u30e5\u30fc\u5bfe\u8c61\u3068\u306a\u308b\u5b9f\u88c5\u4f8b\npublic class ReviewableResource : IDisposable\n{\n    private bool _disposed;\n    private readonly object _lock = new object();\n    private SqlConnection _connection;\n    private Timer _timer;\n\n    \/\/ \u2705 \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c81: \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5\n    public void DoWork()\n    {\n        lock (_lock)\n        {\n            ThrowIfDisposed();\n            \/\/ \u51e6\u7406\u5185\u5bb9\n        }\n    }\n\n    \/\/ \u2705 \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c82: Dispose\u524d\u306e\u72b6\u614b\u30c1\u30a7\u30c3\u30af\n    private void ThrowIfDisposed()\n    {\n        if (_disposed)\n        {\n            throw new ObjectDisposedException(nameof(ReviewableResource));\n        }\n    }\n\n    \/\/ \u2705 \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c83: \u5b8c\u5168\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    \/\/ \u2705 \u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c84: \u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u9069\u5207\u306a\u9806\u5e8f\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                lock (_lock)  \/\/ \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u89e3\u653e\n                {\n                    if (_timer != null)\n                    {\n                        _timer.Dispose();\n                        _timer = null;\n                    }\n                    if (_connection != null)\n                    {\n                        _connection.Dispose();\n                        _connection = null;\n                    }\n                }\n            }\n            _disposed = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u30ec\u30d3\u30e5\u30fc\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list is-style-sango-list-stitch-orange\">\n<li><strong>\u57fa\u672c\u5b9f\u88c5\u306e\u78ba\u8a8d<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>IDisposable\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>Dispose\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>disposed\u30d5\u30e9\u30b0\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>GC.SuppressFinalize(this)\u306e\u547c\u3073\u51fa\u3057<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30b9\u30ec\u30c3\u30c9\u5b89\u5168\u6027<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>\u540c\u671f\u5316\u30e1\u30ab\u30cb\u30ba\u30e0\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u4fdd\u8b77<\/li>\n\n\n\n<li>\u7af6\u5408\u72b6\u614b\u306e\u9632\u6b62<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>\u30de\u30cd\u30fc\u30b8\u30c9\/\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u533a\u5225<\/li>\n\n\n\n<li>\u89e3\u653e\u9806\u5e8f\u306e\u9069\u5207\u6027<\/li>\n\n\n\n<li>null\u6761\u4ef6\u6f14\u7b97\u5b50\u306e\u4f7f\u7528<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u51e6\u7406<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-check\">\n<li>\u4f8b\u5916\u306e\u9069\u5207\u306a\u51e6\u7406<\/li>\n\n\n\n<li>ObjectDisposedException\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u72b6\u614b\u30c1\u30a7\u30c3\u30af\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-40\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">1. <strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u7ba1\u7406<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseManager : IDisposable\n{\n    private readonly SqlConnection _connection;\n    private readonly CancellationTokenSource _cts;\n    private readonly ILogger _logger;\n    private bool _disposed;\n\n    public DatabaseManager(string connectionString, ILogger logger)\n    {\n        _connection = new SqlConnection(connectionString);\n        _cts = new CancellationTokenSource();\n        _logger = logger;\n    }\n\n    public async Task ExecuteQueryAsync(string query)\n    {\n        try\n        {\n            ThrowIfDisposed();\n            await using var command = new SqlCommand(query, _connection);\n            await command.ExecuteNonQueryAsync(_cts.Token);\n        }\n        catch (Exception ex)\n        {\n            _logger.LogError(ex, \"Query execution failed\");\n            throw;\n        }\n    }\n\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    protected virtual void Dispose(bool disposing)\n    {\n        if (!_disposed)\n        {\n            if (disposing)\n            {\n                try\n                {\n                    if (_cts != null)\n                    {\n                        _cts.Cancel();\n                        _cts.Dispose();\n                        _cts = null;\n                    }\n                    if (_connection != null)\n                    {\n                        _connection.Dispose();\n                        _connection = null;\n                    }\n                }\n                catch (Exception ex)\n                {\n                    _logger.LogError(ex, \"Error during disposal\");\n                }\n            }\n            _disposed = true;\n        }\n    }\n\n    private void ThrowIfDisposed()\n    {\n        if (_disposed)\n        {\n            throw new ObjectDisposedException(nameof(DatabaseManager));\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">2. <strong>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3<\/strong><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class FileProcessor : IAsyncDisposable\n{\n    private readonly FileStream _fileStream;\n    private readonly SemaphoreSlim _semaphore;\n    private bool _disposed;\n\n    public FileProcessor(string filePath)\n    {\n        _fileStream = new FileStream(filePath, FileMode.OpenOrCreate);\n        _semaphore = new SemaphoreSlim(1, 1);\n    }\n\n    public async Task ProcessAsync(byte[] data)\n    {\n        await _semaphore.WaitAsync();\n        try\n        {\n            if (_disposed)\n            {\n                throw new ObjectDisposedException(nameof(FileProcessor));\n            }\n\n            await _fileStream.WriteAsync(data);\n            await _fileStream.FlushAsync();\n        }\n        finally\n        {\n            _semaphore.Release();\n        }\n    }\n\n    public async ValueTask DisposeAsync()\n    {\n        if (_disposed)\n        {\n            return;\n        }\n\n        await _semaphore.WaitAsync();\n        try\n        {\n            if (!_disposed)\n            {\n                if (_fileStream != null)\n                {\n                    await _fileStream.DisposeAsync();\n                    _fileStream = null;\n                }\n                if (_semaphore != null)\n                {\n                    _semaphore.Dispose();\n                    _semaphore = null;\n                }\n                _disposed = true;\n            }\n        }\n        finally\n        {\n            if (_semaphore != null)\n            {\n                _semaphore.Release();\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u3092\u52b9\u7387\u7684\u306b\u884c\u3044\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u304e\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5b9a\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-43\">Dispose\u30d1\u30bf\u30fc\u30f3\u306e\u307e\u3068\u3081<\/h2>\n\n\n\n<p>Dispose\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u5358\u306a\u308b\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u4ed5\u7d44\u307f\u3067\u306f\u306a\u304f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u76f4\u7d50\u3059\u308b\u91cd\u8981\u306a\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002<br>\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u30eb\u30fc\u30eb\u3092\u62bc\u3055\u3048\u3001\u975e\u540c\u671f\u51e6\u7406\u3084\u7d99\u627f\u306a\u3069\u306e\u5fdc\u7528\u7684\u306a\u30b1\u30fc\u30b9\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u5b9f\u88c5\u3092\u5fc3\u304c\u3051\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u3053\u306e\u8a18\u4e8b\u306e\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u5b9f\u88c5\u306e\u30dd\u30a4\u30f3\u30c8<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>IDisposable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u6b63\u3057\u3044\u5b9f\u88c5<\/li>\n\n\n\n<li>disposed\u30d5\u30e9\u30b0\u306b\u3088\u308b\u4e8c\u91cd\u89e3\u653e\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u30de\u30cd\u30fc\u30b8\u30c9\/\u30a2\u30f3\u30de\u30cd\u30fc\u30b8\u30c9\u30ea\u30bd\u30fc\u30b9\u306e\u533a\u5225\u3068\u9069\u5207\u306a\u89e3\u653e<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u9ad8\u5ea6\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308bIAsyncDisposable\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u7d99\u627f\u6642\u306e\u9069\u5207\u306aDispose\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u5b9f\u88c5\u65b9\u6cd5<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4e00\u822c\u7684\u306a\u30df\u30b9\u306e\u56de\u907f<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306e\u9069\u5207\u306a\u89e3\u9664<\/li>\n\n\n\n<li>\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u5185\u306eDisposable\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u78ba\u5b9f\u306a\u89e3\u653e<\/li>\n\n\n\n<li>\u4f8b\u5916\u767a\u751f\u6642\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u4fdd\u8a3c<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u30d5\u30a1\u30a4\u30ca\u30e9\u30a4\u30b6\u30fc\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u9806\u5e8f\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u64cd\u4f5c\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":2795,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,61],"tags":[],"class_list":{"0":"post-2012","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-csharp","8":"category-csharp-syntax"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2012","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2012"}],"version-history":[{"count":4,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2012\/revisions"}],"predecessor-version":[{"id":2016,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2012\/revisions\/2016"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/media\/2795"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}