> What you are observing is the Windows System File Cache.

I already explained this is not the normal Windows File Caching that you would 
typically see. File Caching would be under STANDBY Mapped File and can be 
easily removed from RAM when memory is needed for something else. You can even 
confirm this yourself very easily, but just running RamMap. Or you can even 
confirm Disk Cache is named "Standby" by just launching Resource Monitor.

Since it's marked as Active, it consumes RAM as if it was a running process. 
Hence the name, active.

From the various screenshots I included you can even confirm it's not normal 
disk cache. Even see after I close the process in Task Manager, the extra RAM 
is immediately freed up and increases the "Cached' and "Available" rows by 
several GBs. If it's not clear, "Cached" is Disk Cache.



    On Thursday, May 25, 2017 8:02 PM, Keith Medcalf <kmedc...@dessus.com> 
wrote:
 

 On Wednesday, 24 May, 2017 18:48, Jamie <eqrecov...@yahoo.com> wrote:

> When I'm performing a large amount of selects of GLOBs/thumbnails from an
> ongoing SQLiteConnection, I'm having a problem where the Windows Active
> Mapped File will constantly grow out of control in size (memory leak?).
> This is under Windows 7, using a .Net Framework 4.0 C# application with
> System.Data.SQLite 1.0.105.1. This is not the optional disk cache that can
> be removed from RAM, but rather a Windows Mapped File marked as 'active'
> that will eat up precious RAM, and I've seen as high as 4GB when I let it
> go on.

What you are observing is the Windows System File Cache.

Memory that is "free" (as in not being used for anything at all) is memory that 
you simply should not have bought.  A properly tuned computer system should 
consume exactly 100% of all available resources at all times with no 
over-commitment (that is, no bottlenecks appearing).  On bitty-boxen this is 
usually very hard to achieve because they are designed for limited utility and 
performance.

What is the "issue" you are seeing?  

If it is "only" that what would otherwise be wasted resources being used for 
something that may be useful (this is Windows after all, so utility by design 
is bound to be sum-optimal) then there is really no issue.

If you are encountering performance issues due to excessive system cache 
forcing out more useful purposes (such as process working set), and you have 
already set Windows into "Rational Behaviour" mode (prefer Application over 
Cache, as opposed to the highly irrational windows default to prefer useless 
crap over usefulness -- just like the default used to be to optimize for 
maximum CPU usage -- at least now Windows just sits around consuming no 
resources and doing nothing asking you to please wait for it to get on with 
doing something useful) then you are running into a known Microsoft Bug that 
has existed in all versions of Windows since, well, forever.

https://support.microsoft.com/en-us/help/976618/you-experience-performance-issues-in-applications-and-services-when-the-system-file-cache-consumes-most-of-the-physical-ram

If you are merely upset that the RAM you paid good money for is actually being 
used for something, then simply stop worrying.  As I said, unused RAM is a 
waste of money.  You can reduce the amount of RAM used by physically unplugging 
some from the computer.  As I said though, in "normal" operation all resources 
(including RAM) should be 100% in use.
 
> Active Mapped Files cannot be seen under Windows Task Manager, and won't
> count against the memory usage for a process, rather one will need a
> Microsoft utility called RamMap to see the problem:
> https://technet.microsoft.com/en-us/sysinternals/rammap.aspx

Of course not.  The memory does not belong to and is not associated with the 
process.  It belongs to the system.

> Here is a small test application I created to help isolate the issue. All
> the application does is read BLOBs/thumbnails from a table in an infinte
> loop and throws them away. The application itself uses very little RAM.
> http://i.imgur.com/mod5ISX.png
> 
> Here's an example of The Active Mapped File growing to insane sizes while
> my test application is running and the connection is still open. The
> active column is the one of concern:
> http://i.imgur.com/lVV97m7.png
> 
> Here are another two images of the change in RAM usage in Task Manager,
> before and after closing the process, even though the process itself shows
> very small RAM usage under all memory columns:
> http://i.imgur.com/LRzzUFc.png
> http://i.imgur.com/k5zNkLj.png
> 
> If anyone knows how I can prevent the Active Mapped File from continuously
> growing larger, please let me know. I've tried changing the Connection
> String, calling different methods on the SQLiteConnection (reset and
> clear), and ensured I was disposing everything appropriately, but I
> haven't managed to find how to reduce the the Active Mapped File size
> while the connection remains.
> 
> Thank you for any help on the matter, and sorry for the long explanation.

Like I said, you can remove RAM from the computer.  If you currently have 8 GB 
and you remove 4 GB, then only 4 GB of RAM will be used.  Other than that there 
is no point whatsoever in doing anything at all unless you have run into the 
known Windows Bug where the system cache forces useful stuff out of memory and 
causes working set thrashing.
 



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


   
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to