none
EF实体框架内存占用问题 RRS feed

  • 问题

  • 本人使用MVC4.0+EF5.0+SQL Server 2012操作数据库,只要使用了EF,SQL Server的内存占用就和我的数据库文件大小成正比,我的数据库文件从3G升到10G,SQL Server的内存占用也从3G+升到10G+,是否使用EF都存在这个问题?请高手指点一下,谢谢!
    2015年4月28日 0:43

答案

  • Hello,

    >>只要使用了EFSQL Server的内存占用就和我的数据库文件大小成正比

    Entity Frameworkcacaheds是数据库到本地,如果你的数据库很大的话,那是有可能内存占用随着数据库文件变大而变大。不过据我所知,占用内存的应该是你hostEF的应用程序,数据库的内存是不会被影响到的,对于数据库的内存为什么会增大,我建议你去sql sever的论坛问这个issue.

    我的建议是你可以每个数据库请求使用一个context对象,用完后就释放掉。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年4月29日 3:41
    版主

全部回复

  • Hello,

    >>只要使用了EFSQL Server的内存占用就和我的数据库文件大小成正比

    Entity Frameworkcacaheds是数据库到本地,如果你的数据库很大的话,那是有可能内存占用随着数据库文件变大而变大。不过据我所知,占用内存的应该是你hostEF的应用程序,数据库的内存是不会被影响到的,对于数据库的内存为什么会增大,我建议你去sql sever的论坛问这个issue.

    我的建议是你可以每个数据库请求使用一个context对象,用完后就释放掉。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年4月29日 3:41
    版主
  • 首先EF本身只是一个ORM框架,它本身是没有内存问题的,正如楼上所说的,因为EF会缓存从数据库的数据为本地对象,因此可以通过VS的性能工具检测出是否存在大量对象缓存的情况,同时也可以找出内存问题的真正原因。

    建议使用EF以以下代码格式使用,创建EF的Context代价很低,因此可以及时释放,并且也可EF避免缓存脏数据的问题!

    using (ProductsContext db = new ProductsContext())
    { 
         //你的代码
    }


    2015年5月19日 12:14