Have you tried (.close stream) in the end of let block?

On 22 јун, 16:10, BerlinBrown <berlin.br...@gmail.com> wrote:
> I want to make it clear, that it probably isn't Clojure's memory
> problem but something with my code.
>
> Anyway, I was trying to figure out my heap memory goes up so much on
> various operations in my application.  Sure, it could be anything but
> I know I am doing something wrong.
>
> Here is the application, a text editor in SWT.  When I open files, the
> heap memory goes up 10 times the size of the file.  So, if I open a
> 3MB file, that is 30MB of heap memory used.
>
> http://code.google.com/p/lighttexteditor/
> ------------------------
>
> There are also some bad designs I am using, still wouldn't explain a
> 10 fold increase in memory.
>
> http://lighttexteditor.googlecode.com/svn/trunk/light_edit/src/clojur...
>
> So far, I have done a couple of things.
>
> 1. Turned on warn on reflection and reduced some of the reflection
> calls by adding type hints.
>
> 2. Tried to reduce the number of calls to deref and not use "global?"
> defines.
>
> Here is the code that I think is the worst offender.  Basically, a
> java oriented approach for opening a file.
>
> (defn open-file-util [file file-path]
>   #^{:doc "Use java oriented approach for loading a file into
> memory" }
>   ;; Java oriented approach for opening file
>   (let [stream (new FileInputStream file-path)
>         instr (new LineNumberReader (new InputStreamReader stream))
>         ;; Use type hints to ensure a character type.
>         readBuffer #^"[C" (make-array (. Character TYPE) 2048)
>         buf (new StringBuffer)]
>     (loop [n (. instr read readBuffer)]
>       (when (> n 0)
>         (. buf append readBuffer 0 n)
>         (recur (. instr read readBuffer))))
>     ;; File info data has been collected, set some of the file
> properties
>     (set-file-info (. file getName)
>                                    (. file getAbsolutePath)
>                    (. file lastModified)
>                                    (. instr getLineNumber)
>                                    (. file getParent)
>                    (. file canWrite)
>                                    (. file exists)
>                                    (. file length))
>     (. instr close)
>     (. buf toString)))
>
> http://lighttexteditor.googlecode.com/svn/trunk/light_edit/src/clojur...
>
> Here are some notes from my early analysis, also a google doc on the
> functions that are called.
> "memory profiling 
> clojure"http://groups.google.com/group/clojure/browse_thread/thread/b44e25f23...
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to