none
关于 GC 的一点小问题 RRS feed

  • 问题

  • 请问 CLR 内部是如何维护上面这个 Dictionary<string, string> 对象的?是每个请求 "Home/Index" 都会 new 一个新的 Dictionary<string, string> 对象吗?还是不会再 new 了,而是从内存中直接取?如果是直接取,那 GC 什么时候去释放这个对象呢?如果把它作为一个静态变量,是否更好一点。前提条件:这个 new Dictionary<string, string>() { { "==请选择==", "" } } 里面的 Key、Value 都是固定的。

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.DropDownListInitItems = new Dictionary<string, string>() { { "==请选择==", "" } };
    
            /* 我的疑问:
                * 
                * 请问 CLR 内部是如何维护上面这个 Dictionary<string, string> 对象的?是每个请求 "Home/Index"
                * 都会 new 一个新的 Dictionary<string, string> 对象吗?还是不会再 new 了,而是从内存中直接取?
                * 如果是直接取,那 GC 什么时候去释放这个对象呢?如果把它作为一个静态变量,是否更好一点。
                * 
                * 前提条件:这个 new Dictionary<string, string>() { { "==请选择==", "" } } 里面的 Key、Value 都是固定的。
                * 
                */
    
            return View();
        }
    }
    
    public class HomeController : Controller
    {
        private static readonly Dictionary<string, string> ITEMS = new Dictionary<string, string>() 
        { 
            { "==请选择==", "" }
        };
    
        public ActionResult Index()
        {
            ViewBag.DropDownListInitItems = ITEMS;
            /* 是否把它申明为静态变量后,性能就好点。 */
            return View();
        }
    }


    • 已移动 ThankfulHeart 2013年6月24日 3:07 ASP.NET的ViewBag问题
    2013年6月24日 2:26

答案

全部回复