LV memory leak - How to use windows API SetProcessWorkingSetSize (from Kernel32.dll)

Hi fellow LV'ers
Okay - this is a bit tricky, but i'll try and explain the problem, then ask for the solution, because it may be that someone knows a better way to deal with this.. might get a bit long, sorry - if a solution comes up this will enable all of us to make more memory efficient LV code so please read on..
Here is the deal:
When building even a very simple LV executable, looking at the windows task manager will yield a rather large amount of memory allocated for such a small program - and the only way to free this up is by physically clicking the windows minimize button, then suddenly the amount drops to only a few MB and upon maximizing the window again the memory consumption will increase somewhat again, but for a simple VI build to an exe this move may change the consumption from +70MB to less than 15 MB.. This is irregardless of the code you put in the VI, so no coding example in this post as it is how LV works - you can even test it with the development environment - look at the task mgr and check LabVIEW's memory consumption, minimze ALL open NI windows incl project explorer etc, and you will see a significant decrease in memory usage even after maximizing again.. This has annoyed me since day one, but since RAM is a near zero cost these days it is not something I stay awake at night to think about.. However - I have moved into the "publish to web" tools now, wanting to do a remote monitoring part for my application for my customers to experience increased usability from the software i sell them..
All is well, publishing is really easy (i use the monitor function, NOT the embeded, as customers need not have Labview RunTimeEngine installed, because they might look at it from a non RTE supported platform such as a mobilephone web browser)
Everything is working fine also for the build application. However - I have noticed that once users start to remote monitor the running application - memory consumption of the running LV application starts to increase - and it keeps doing so - to such an extend that you can drain the computer complete and run off the cliff with a windows error... This is off course not very productive for me, being specialized in measurement applications that usually runs for a long period of time - I initially thought that I had done some poor programming in the VI used to display on the webpage - but it turns out that I can reproduce this behaviour with a simple boolean on an empty front panel..
NI support has been informed, and they admit there is a problem, but so far solutions from them has been a bit too exotic for my taste, and thus I'm seeking the help of fellow LV programmers...
You see - The method to solve the increasing memory consumption, is the exact same as mentioned above..minimize the application running with the "minimize" button and all memory will be freed, as soon as you maximize the application and users are viewing it remotely, the memory usage raises again, and history repeats... As previously mentioned, minimizing the window via normal LV calls to property nodes does not yield the same result, nor does a request deallocation of a VI(When you profile a project, there are no VI's increasing in memory, it is the LV process it self doing it) 
After many many hours googling I stumbled upon this:
http://support.microsoft.com/?kbid=293215
I believe trimming the process with SetProcessWorkingSetSize would solve this problem, and now I would really like to be able to do this in my program, so that users are not forced to minimize the program every X hour depending on their system size...
However - I have absolutely NO experience in calling windows API from LV, i need someone with that knowledge to provide an example of how to call this.. I've looked at examples on how to do calls to windows API - there is an example in this forum with some llb's in it, and I have gained a fair understanding of how parameters are passed between the calls, but none of those include the "hProcess" handle that is apparently needed for this specific winAPI call to work - Anyone in this forum with the knowledge on how to obtain this handle from a VI, if at all possible, and could provide an example VI for me to use - or even better , someone with the knowledge of how to do this within LV it self??
Your help is much appreciated
Best Regards
Jacob
LV8.6.1 patch something
Win XP 
Solved!
Go to Solution.

Hi Enrico
Finally I can give something to the community that has given me so much  :-)
The "official" statement is that "yes we know it is a problem".. Not sure what that will do to the future.. 
I have the problem on 8.6.1 as well  - and in fact it is a general LV problem, that I first time reported to NI with LV8.2 as I was pissed by the fact that even the smallest exe file would consume + 50MB of memory until you manually minimized the window. Well - thanks to the feedback from Cosmin I seem to have solved the problem.
I most warn that having started to "empty process" once in a while has led to occasional program crashes in the lethal "app.exe performed an illegal action and is closed" windows dialog - however what I did was to move the webserver to a seperate exe file and then communicate the data that I want to use via datasocket in a cluster.. It works like a charm and I simply stall the single thread that the webserver is running when ever the empty process is called and I have not seen a crash since then.. (the initial implementation was done in the main app with 4 parallel loops running, and I guess that was a disaster waiting to happen)
Either way - what I have done is made a VI that at a user defined interval calls the empty process, simply by getting the .exe name from the task manager of the calling program - it is simple and very effective. I call it every 5 minutes - needless to say that flushing too often will most likely kill performance of the system. I have not noticed problems with VM - are you sure you are not storing large arrays or moving around copies of data not used frequently?
For future reference to this forum, it is attached here including the .dll required to call - it is a LV8.6.1 file as I have not had the time to yet again test every single function of my program for new problems that could occur with upgrading to LV2009 
I hope this solves your problem..
best regards
Jacob
www.10EaZy.com 
Attachments:
EmptyProcess.zip ‏32 KB

Similar Messages

  • Using Windows API in Java

    hi,
    How can i use windows api in java.
    regards
    Malik Faisal

    By writing a wrapper in JNI.
    JNI Tutorial.

  • Using Windows API in my LabWindows CVI code

    Hi all.
    I would like any and all help. I am developing on LabWINDOWS 2010 and am trying to use the Windows API, particularly the multimedia APIs, in my CVI code. What I am trying to do is audio development, only it has to be in .NET or Visual C++ platform. I have developed the code and UIR, but when I build the solution it tanks on me. Of course when I use MS Visual C++ 2008 or 2010 there are no errors and I could use MS Visual C++ to develop my application, but the development of the user interface and the controls is much more straight forward with CVI and there are more controls to work with than there are with MS Visual C++. Most of the errors that I get are related to the following header files: "MMSystem.h", "devicetopology.h",  and the "endpointvolume.h". When I try and build a skelton project with no controls or indicators on the .UIR I get the errors like:
    "devicetopology.h"(2301,20) Missing parameter type.
    "devicetopology.h"(2301,40) syntax error; found '*' expecting ')'.
     "MMSystem.h"(151,1) Unrecognized declaration.
    "MMSystem.h"(850,96) syntax error; found 'identifier' expecting ')'.
    That is just a few of them, but they typically say the same thing. I have included the header files and libraries in my project, and  have made sure that they are in the CVI "sdk" directory. I have tried example code that have these header files and the result is still the same. I know that I should not have these type of issue, at least I don't think I should. Like I said I could use as much help as possible of figuring out what is the matter. Did I install the CVI improperly? Are there patches that I need to actually use windows APIs? I am attaching to this post my code and the code I downloaded from a LabWINDOWS forum. When I ran the code from the forum I got the same errors.   
    Thanks in advance.
    Attachments:
    AudioVolume.c ‏2 KB
    VISTAS-OpenAL.c ‏44 KB

    Humphreyy,
    thanks for the tip. I tried it but it did not work, the same errors were present. Are there any other suggestions. I have racked my brain to figure out why this is happening and have come up with nothing. I am also getting a "Warning" message concerning the "KsMedia.h" file that says "Warning: Excess characters in multibyte character literal ignored." The warnings trace back to the "typedef enum" section of that file. Could that be causing a ripple effect that produces the error I am seeing in the other header files I mentioned??
    I could really use your help and any more help that is available. I really don't want to use Visual C++, because this software is going to get more sophisticated and is to be used in NASA Langley's VISTAS simulator, an environment taylor made for National Instruments software.

  • How to Use Windows XP theme in Java

    How to Use Windows XP theme in Java.
    I am an developing application which L&F should be like Windows XP.
    Because I am going use this application in different OS.
    Which LookAndFeel I have to use it

    try this in main:
    try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
    catch (Exception exc) {System.err.println("Eroare la incarcarea look & feel" + exc);}

  • How to use java api for function activity in embed oracle workflow?

    because i can't install standalone oracle workflow successfully.
    pls tell me how to use java api for function activity in embed oracle workflow?
    are there some patch or pulg-in package?
    ths a lot...........

    The Java Function Activity Agent is not certified for Oracle Workflow embedded in Oracle Applications. Installing standalone workflow should be a lot easier than what you have found, although it looks like you did hit a Pentium 4 issue with the Oracle Universal Installer. I suggest you contact Oracle Support or Oracle Consulting for assistance.
    because i can't install standalone oracle workflow successfully.
    pls tell me how to use java api for function activity in embed oracle workflow?
    are there some patch or pulg-in package?
    ths a lot...........

  • How to download itunes and how to use windows in my iPad?

    How to download itunes and how to use windows in my iPad?

    The iTunes  app comes pre installed on your iPad.
    Use Windows? The iPad is an iOS device. Not possible to run Windows on an iPad.

  • How To use window.print() into Button Attributes

    hi,
    I want to print a report using an print button.so i am using window.print() function into Button Attributes .But Print pop up screen not pop up . How To use window.print() into Button Attributes      .
    Thanks
    Manoj

    dear hari
    "Set button target as URL and put following js as URL Target
    javascript:window.print();"
    Will this be useful to my another thread raised as follows.
    In case, if i am able to generate report as txt (ascii) file instead of doc / pdf and is it possible to send the txt file using host command. I am uable to try since i do not know where to place host command on click &print.
    yours
    dr.s.raghunathan

  • Where I can find documentations on how to use MyComponse API ?

    Where I can find documentation on how to use MyComponse API ?
    Any example ?
    Thanks

    not 100% sure at which point the callout to BEFOREPROCESSCOMPOSE is done, but during the process logs phase, the data in the CVR$ tables is copied into the clg$ tables, and the cvr$ table dml flags cleared
    unles the query is very complex/long running why not join the clg$ tables (only have the data that has changed, so smaller than the cvr$ tables, to your base tables for determining if relevant within the MyCompose needCompose method?
    an example from one of our MyCompose classes is
    public int needCompose(Connection conn, String clientid) throws Throwable{
    boolean baseDirty = false;
    Statement st = conn.createStatement();
    String sql = null;
    int rowCount = 0;
    int fetchCount = 0;
    ResultSet rows;
    // log user
    // sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    // + " values (sysdate, '" + clientid + " assd' )";
    // rowCount += st.executeUpdate(sql);
    // need to compose if there are any relevant changes to assessment details FOR
    // TIR / SOLO assessments
    // Inspection history checklists
    // PIJ marking sheets
    // INSSI
    // Risk Assessment)
    // also changes to (in case of underlying alterations causing data to be withdrawn)
    // STATUS_LOGS
    // ROLE_ASSGNTS
    if(this.baseTableDirty("CDB_OWNER", "ASSESSMENT_DETAILS")){
    return oracle.lite.sync.MyCompose.YES;
    if(this.baseTableDirty("CDB_OWNER", "STATUS_LOGS")){
    sql = "SELECT count(clg.context_key) "
    + "FROM CDB_OWNER.ROLE_ASSGNTS rola "
    + " ,CDB_OWNER.USER_ACCOUNTS usra "
    + " ,CDB_OWNER.CLG$STATUS_LOGS clg "
    + "WHERE usra.user_name = '" + clientid + "' "
    + "AND rola.rolat_rol_code IN ('INSPECTOR','COVER_INSP','DELEG_INSP') "
    + "AND rola.context_key_by=to_char(usra.par_id) "
    + "AND rola.context_key_for=clg.context_key "
    + "AND clg.staa_seq_no=47 ";
    rows = st.executeQuery(sql);
    rows.next();
    fetchCount = rows.getInt(1);
    if (fetchCount != 0) {
    sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    + " values (sysdate, '" + clientid + " assd stal" + fetchCount + "' )";
    rowCount += st.executeUpdate(sql);
    return oracle.lite.sync.MyCompose.YES;
    if(this.baseTableDirty("CDB_OWNER", "ROLE_ASSGNTS")){
    sql = "SELECT count(clg.id) "
    + "FROM CDB_OWNER.ROLE_ASSGNTS rola "
    + " ,CDB_OWNER.USER_ACCOUNTS usra "
    + " ,CDB_OWNER.CLG$ROLE_ASSGNTS clg "
    + "WHERE usra.user_name = '" + clientid + "' "
    + "AND rola.rolat_rol_code IN ('INSPECTOR','COVER_INSP','DELEG_INSP') "
    + "AND rola.context_key_by=to_char(usra.par_id) "
    + "AND rola.id=clg.id ";
    rows = st.executeQuery(sql);
    rows.next();
    fetchCount = rows.getInt(1);
    if (fetchCount != 0) {
    sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    + " values (sysdate, '" + clientid + " assd rola" + fetchCount + "' )";
    rowCount += st.executeUpdate(sql);
    return oracle.lite.sync.MyCompose.YES;
    // if no relevant changes do not compose
    return oracle.lite.sync.MyCompose.NO;
    }

  • I have a seagate 1tb hard drive and a 16gb memory stick, how do i transfer avi files from one to another as the click drag and drop wont work, please help?

    i have a seagate 1tb hard drive and a 16gb memory stick, how do i transfer avi files from one to another as the click drag and drop wont work, please help?

    Greetings,
    What happens when you drag it?
    Make sure the drive you are moving the files to has enough available space to receive the file:
    Click on the movie file and go to File >  Get Info and note the "size"
    Check the drive to which you are moving the file to make sure it has enough available space: https://idisk.me.com/madisonfile-Public/web/finder-drive-available-space-and-for mat.html
    Also note the format of the drive you are copying too.  If it is not Mac OS Extended or FAT (not recommended unless you are taking it to a windows computer) then that may be the issue.
    Hope that helps.

  • Client-side Memory leak while executing PL/SQL and reading from a view

    Iam noticing memory leaks in OCCI while performing the following:
    Sample function()
    1. Obtain a connection
    2. Create a statement to execute a PL/SQL procedure
    3 Execute the statement created in step #2
    4. Terminate the statement created in step #2
    5. Create a statement to read from a view which was populated
    by executing stored procedure in step #3
    6. Execute the statement created in step #5
    7. Terminate the statement created in step #5
    8. Release the connection
    The PL/SQL populates a view with fixed 65,000 records for every execution. PL/SQL opens a cursor, loads 65000 records and populates the target view and closes the cursor at the end. If i invoke the above function it results in memory leak of 4M for every call. I tried several variants such as:
    1. Disabling statement caching
    2. Using setSQL instead of newly creating second SQL statement
    3. Obtaining two separate connections for these two activities (PL/SQL exec and View read)
    4. Breaking the sample function into two, one for each of these activities (PL/SQL exec and View read).
    All the combinations results in the same behaviour of 4M memory leak.
    Iam using Oracle 10g Client/Server 10.2.0.1.0.
    Is there any known limitations in this area?

    Yes. Iam closing the result set and terminating the statement.
    My program contains layers of inhouse wrapper classes, which will take some time for
    me to present it in pure OCCI calls, to be posted here for your understanding.
    After some more debugging, i found that if the connection level statement caching is set to
    0, the memory leak is much lower than before.
    Thanks.
    Message was edited by:
    user498920

  • Hi yesterday i downloaded a software from i tunes for keyboard short cut and i don't know how to use them and install them, how to use keyboard shorts bought from i tunes

    hi yesterday i downloaded a software from i tunes for keyboard short cut and i don't know how to use them and install them, how to use keyboard shorts bought from i tunes

    You can install it on your iOS device (iPad, iPhone, iPod Touch) either by redownloading it directly on the device via the Purchased tab in the App Store app on it, or by connecting the device to your computer's iTunes and syncing it to it.
    Syncing apps from a Mac : iTunes 11 for Mac: Sync and organize iOS apps
    from a PC : iTunes 11 for Windows: Sync and organize iOS apps
    As to how to then use the app, if the description on the app's description page in the store doesn't describe how to use it in enough detail, then is there a link to the developer's website on its description page, and does that have details ?

  • How to use Sql data source from Essbase 9.3.1

    Hi All,
    How to use Sql data source from Essbase 9.3.1 for ASO cube.Are there any rules and limitations for that.
    Do we need to create any data source connection for this purpose. If there please let me know the dteps to create that connection.
    Regards

    Yes you need to create one DSN connection and you have to use DSN name and login details at the time of building/loading of the outline.
    Create DSN
    Goto Administrative tools -> DataSources (ODBC) and add the DSN name and specify the Server name of SQL and login details and database.
    goto data prep editor and click on File Menu and Click on Open SQL option Next window opens.
    There you have to enter the details of the DSN connection and SQL query to build/load.
    Thanks,
    Prathap

  • Can't print to HP 6500 e709a printer using Windows 8.1 from new HP Pavillion Laptop..

    Can't print to HP 6500 e709a printer using Windows 8.1 from new HP Pavillion Laptop..have installed/reinstalled/deleted all-in-one  etc tc 20 times HP Solution keeps snding me to download all-in-1 software.

    Welcome to the HP Community , I read about how you cannot print to your Officejet 6500 e709a printer from your Windows 8.1 system, and I hope to help you! I am curious to find out that if there are any error codes or messages that occur when you run the installation for the printers driver and software. Please try the installation first by running the HP Printer Install Wizard for Windows. If you see any errors, report them back to me and I will take a look at them. Please also run the Print and Scan Doctor. This diagnostic tool will check for any conflicts that could be causing the issue. The tool will show you a report at the end. If there was a problem that the tool could not fix, you will notice it in the results. Let me know what the results say. They will tell you if they fix a component, there is a critical error (red x will appear), or will show green check marks if everything checks out fine. You can run the tool twice and choose "fix scanning", and then "fix printing" on the second round, or vise versa. I hope to hear from you!Show thanks for my reply to help you today by hitting the "thumbs up" icon below!  

  • How to use 'DELETE ADJACENT DUPLICATES FROM' for deleting as some field

    How to use 'DELETE ADJACENT DUPLICATES FROM' for deleting as some field
    eg:
    I have a inner table ,it contains a field named ast_guid,now,I search ten records,contains some duplicate records in the field of ast_guid.but I can not delete the duplicate records as ast_guid.

    If the type of  inner table is standard table,  you should sort the inner table  by the fields before user 'DELETE ADJACENT DUPLICATES  ', and use COMPARING addtion.
    Edited by: Justin on Jun 28, 2009 9:48 AM

  • How to fix huge iTunes memory leak in 64-bit Windows 7?

    iTunes likes to allocate as much as 1.6GB of memory on my dual-quad XEON 8GB 64-Bit Windows computer and then becomes unresponsive.
    This can happen several times a day and has been going on for as long as I can remember.  No other software that I use does this - only Apple's iTunes.  Each version I have installed of iTunes appears to have this same memory leak.  Currently I am running version 10.7.0.21.
    I love iTunes when it works.  But having to constantly kill and relaunch the app throughout the day is bringing me down.
    Searching for a fix for this on the internet just surfaces more and more complaints about this problem - but without a solution.
    Having written shrinkwrapped software for end users as well as for large corporations and governments for more than 25 years I know a thing or two about software.  A leak like this should take no more than a day or two to locate using modern software tools and double that to fix it.  So why with each new version of iTunes does this problem persist?  iTunes for Windows is the flagship software product Apple makes for non-Mac users - yet they continue to pass up each opportunity they have had over the years with each new release to fix this issue.  Why is this?
    Either the software engineers are not that good or they have been told NOT to spend time on this issue.  I personally believe that the engineers at Apple are very good, and therefore am left thinking that the latter is more likely the case.  Maybe this is to coax people to purchase a Mac so that they can finally run iTunes without these egregious memory leaks.  I would like to offer another issue to consider.
    Just as Amazon sold Kindles and Google sold Nexus tablets at low cost - not counting on margin for profit - but instead they wanted to saturate the marketplace with tools for making future purchases of content almost trivial to do with their devices.  Apple also counts on this model with their pricer hardware - but they also have iTunes.  Instead of trying to get people to switch to a MAC by continuing to avoid fixing this glaring issue in iTunes for Windows I would like to suggest that by allowing their engineers to address this issue that Apple will help keep Windows users from jumping ship to another music app.  The profit to be made by keeping those Windows users happy and wedded to the iTunes store is obvious.
    By continuing to keep this leak in iTunes for Windows all it does is lower my esteem for the company and start to make me wonder if the software is just as buggy on Macs.

    I have same issue. Ongoing for more than 1 year and currently running iTunes 11.3.
    My PC is Dell OptiPlex 990 I7 processor, 8GB ram, W7 64 [always keep things patched up to latest OS updates etc]
    I use this iTunes install to stream music videos etc to multiple appleTVs, ipads, iphones etc .. via Home Sharing
    Store all my media including music, videos and apps on separate NAS  .. so the iTunes running on PC is only doing the traffic cop role and streaming / using files stored on NAS .. creates lots of IO across my network
    Previous troubleshooting suggest possible contributing causes include
    a) podcast updates  .. until recently I had this auto updates on multiple podcast subscriptions, presumably the iTunes would flow this from the PC to save on the NAS across the network .. if the memory leak is in the iTunes network communication layer (?bonjour?)  this may be sensitive to IO that would not normally occur if the iTunes file saving was local on the same PC
    b) app updates .. have 200+ apps in my library and there is always a batch of updates .. some updates 100s of MB is size .. routinely see 500MB to 1GB of updates in single update run .. all my apps are
    c) streaming music / movies .. seems when we ramp up streamlining of music or movies . memory leak grows faster .. ie within hours of clean start
    c) large syncs of music or videos to ipads or iphones .. noticed that get big problems when I rebuild an ipad .. I typically have 60+ GB of data in terms of apps /  music / videos to load .. have to do rebuild in phases due to periodic lockups

Maybe you are looking for

  • How to achieve parallel processing in a single request?

    Hi all, I have a method in a Session EJB that will perform some business logic before it returns an answer to the client. The logic it will perform is to collect data from the applications database and two external systems, before sending all data to

  • Exception processing message on K230

    I just got an IdeaCentre K230 (running Vista) and transferred my files from my old computer to the new one using LapLink.  Now the new computer has been crashing, and I keep getting the following message: Windows--no disk Exception Processing Message

  • How do I force cellular data while on Wi-Fi

         Here is my problem:  I want to run airplay from my iphone to a stereo in my garage that is under my house.  I bought an airport express and put it in my garage and ran a 3.5 mm jack from it to my stereo.  The problem is the range on the airport

  • Replace Phonon-Gstreamer by Phonon-VLC [SOLVED]

    Hi, i'm quite new to GNU/Linux and this is one of the thing i don't understand. By reading the archwiki article about phonon which makes you independent on any multimedia framework like gstreamer I switched to phonon-vlc backend since i use vlc and a

  • MPB 30" Monitor

    I just purchased my first Mac product a MBP. What I'm trying to find out is if the MBP can support a 30" monitor with the following requirements for best viewing. "Have a dual-link DVI-D graphics card that supports 2560x1600 resolution".