Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About ccrooks

  • Rank
    Senior Software Developer
  • Birthday March 12


Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. ccrooks

    Problem with runAsync

    In general, we would recommend using run() instead of runasync() if it's OK for user input to block. If that is not OK, say for a UI application, then runasync might be useful. If the problem is reproducible, you could send us the model and code to support@simio.com we could take a look to see if we can figure out where exactly something might be hanging.
  2. ccrooks

    Best Modeling Approach Tables or Repeating Properties?

    Repeat groups will tend to be more performant than tables for this use. There is a lot of ceremony and setup that needs to happen internally when using tables, due to their relational nature, to make sure table references resolve correctly. Repeat groups don't have relations, and so we can just simply iterate through them as a flat list. Tables however are relational, which allows a lot more flexibility in terms of data design. It also provides a nice way to import data as well. However, if you are doing this all via the API, and don't need to really interact with the data in the desktop software after that, the import capabilities are probably a moot point. There are no real "limits" internally as to size for either tables or repeat groups. You should really only be limited by the amount of memory available to Simio.
  3. ccrooks

    Help dealing with many models

    To help speed up a large batch of operations on a model, I would suggest trying the IModel.BulkUpdate routine. It may help. However, batch removals are hard. Our current code path always tries to keep the errors and error window up to date, which means on every deletion we basically notify every object in the model that something was deleted and give it an opportunity to say "Hey, wait! I was referencing that! Now I need to generate an error..." There may be ways to speed up the removal of a majority of objects from a model, but that is something we'd have to schedule internally on our feature backlog.
  4. ccrooks

    Remember Window Settings

    Excellent idea! I just committed a change for this, and you should see the size of the repeating editor being saved in the next sprint release.
  5. ccrooks

    Remember Window Settings

    We had turned it off in February after discovering some issues where it wouldn't work quite right 100% of the time. Currently however we can't find those same issues. So, for the next sprint, the functionality will be turned back on, but with an application setting called Restore Docking Window Locations, that will default to False. If you want the windows to come back to their old locations, you'll have to explicitly set this to True.
  6. When we first implemented it, we went with a standard "First Person Shooter" coordinate system, meaning (for a person standing up, looking forward), X was the horizontal on the screen, Y was vertical on the screen, and Z was depth. Of course, if you change your perspective to now "look down" at the world (which is the standard way you start looking at stuff in Simio), those same axis now turn into X being horizontal, Y being depth, and Z being vertical. We certainly could maybe rename and reorder them in the property grid or something to make more sense so maybe instead they maybe look like: Vertical (old X) Horizontal (old Z) Height (old Y) I don't know if that would be more or less confusing for users however.
  7. ccrooks

    Unit Types - Metric Tons per Day

    Would you need ' per day' for every unit type or just specific ones? For example do you need it for Travel Rate 'Miles per day' or just for something like mass and volume flow: 'Kilograms per day', 'Liters per day', etc?
  8. ccrooks

    How to improve model loading und updating times

    Cloning it to a new model file certainly should work. You just have to be careful you still have a single "source of truth" if you wish to use that object for future updates. We only track changes by an internal incrementing version number, so if you make changes to the object in both the original and new library, those now different objects could be seen as the same one by Simio if they happen to have been edited the same number of times (we increment the version number on each edit-save cycle).
  9. ccrooks

    How to improve model loading und updating times

    There is really not much you can do in terms of speeding things up. If possible, it would be helpful for you to forward those items to our support team, and they can then send them on to development, so we can see internally where Simio is taking time for updates. We re-wrote a bunch of the update code a while ago with correctness in mind (and performance second), so there are probably changes to the code we can do on our end to speed things up.
  10. As mentioned in the description for the Distribute Runs property: The feature is available in Team and Enterprise editions of Simio. It is specifically not available for academic editions at this time.
  11. ccrooks

    Search step efficiency

    If I understand your need correctly, you currently have a table like this: Product Name | Material ================== ProductA | MaterialA ProductA | MaterialB ProductB | MaterialA ProductB | MaterialC You are then using Search to find all rows that say match "ProductA", then using the value of the Material column. If that is indeed the case, you could create two tables: a "Product" table, and a "Material Usage" table. The "Product Table" would just contain the products (in a column marked as a Key): Name ========== ProductA ProductB The "Material Usage" table would look like the first table above, with the Product Name column being a Foreign Key into the Product Table's key column (Name). Then if you set a row on the entity/token to a row in the "Product Table", the "Material Usage" table will automatically be "filtered" down to just the rows pointing to that product. You can then use the Search step not to search the Material Usage table, but simply to enumerate it, to fire a new token for every row related to the product. You need to make sure the Search Related Rows Only on the Search step is set to "True".
  12. ccrooks

    Search step efficiency

    Currently, we just do a simple linear search, from top to bottom, hitting each row and running the Match Condition expression on it. We stop the search at the end of the table or whenever we hit the Limit of found items, whichever comes first. If you have a very large number of rows, and are looking for data in a sortable column, you *may* have better performance by not using Search and instead putting the table in sorted order, and then using steps to create binary search of that sorted data.
  13. ccrooks

    References errors and bugs

    In general yes, you just have to be careful to make sure you opt-in for all the object updates. So, for example, the Encomenda used in your "greater model" will match the version referenced by the model in the same project as Encomenda, which is also used in the "greater model". If you are doing the updates but still having issues, there may be some corner case we may not be handling correctly, in which case I would send the model and the instructions of what your standard update path is to support@simio.com
  14. ccrooks

    References errors and bugs

    If you are using Sprint 86 or later, you can hold down Shift and then click on the Object References... menu item in your model to open the references dialog in a mode that allows you the change the versions it thinks it has. If you do that in your model, and change the "13" to "1" and then do a Check for Updates, it should update to version 12. Note that if you have references to Encomenda in *other* library objects, they ALL need to agree on what version you are using. So let's say: - Encomenda version 1 is used in object A version 1 - Object A version 1 is used in your model - Encomenda version 1 is used in your model Let's say you then make changes to make Encomenda go to version 2. If you then run updates, and *just* pick to update Encomenda (assuming Ecomenda and A were in the same library, both should have gotten versioned up when Encomenda changed), the model will be using version 2, but the A inside it will still be using version 1. When the model tries to pass an Encomenda version 2 to one of it's A instances, you will have a message like you got here. Do you know if your Encomenda object is used (or referenced via an expression) in other objects? If so, are they in the same project as Encomenda?
  15. ccrooks

    PNG icons with alpha problem

    This is *probably* because those PNGs were written out with a PPI (Pixels per inch) value which isn't 96 ppi. We will draw them correctly in the next sprint release. Thanks for the report!