<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Modify Shared Parameters for high number of family instance in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9730007#M32090</link>
    <description>&lt;P&gt;Thank you Jeremy,&lt;BR /&gt;&lt;BR /&gt;I apply the solution and got&amp;nbsp; execution time improved. here is some results before and after the modification.&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Number of Family instance&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Time before (ms)&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Time After(ms)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;58&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;896&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;794&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;375&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1958&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1549&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1052&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;16777&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8152&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;But there are always times when changes are not applied to the document.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Fri, 04 Sep 2020 14:47:07 GMT</pubDate>
    <dc:creator>f.djiomejoungleroi.Ext</dc:creator>
    <dc:date>2020-09-04T14:47:07Z</dc:date>
    <item>
      <title>Modify Shared Parameters for high number of family instance</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9727166#M32088</link>
      <description>&lt;P&gt;Hello,&lt;BR /&gt;I have the code below working fine when my collection contain less than 30 objet; above 30 the transaction commit doesn't affect document and there is no error or exception raised. Did some one have an idea to solve this?&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;void IExternalEventHandler.Execute(UIApplication app)
{
	UIDocument uidoc = app.ActiveUIDocument;
	Document doc = uidoc.Document;
	View view = doc.ActiveView;

	using (Transaction tr = new Transaction(doc))
		{
			Parameter param1 = null;
			Parameter param2;
			Parameter param3 ;
			Parameter param4 = null;
			Parameter param5 = null;
			Parameter param6 = null;
			Parameter param7 = null;

			tr.Start("synchro");
			
			for(int i = 0; i &amp;lt; Main.idForSynchros.Count; i++) // Main.idForSynchro is the collection of data
			{
				IdForSynchro idForSynchro = Main.idForSynchros[i];
				Element element = doc.GetElement(new ElementId(Convert.ToInt32(idForSynchro.RevitId)));

				param1 = element.LookupParameter("PLUGIN_PARAM1");
				param2 = element.LookupParameter("PLUGIN_PARAM2");
				param3 = element.LookupParameter("PLUGIN_PARAM3");
				param4 = element.LookupParameter("PLUGIN_PARAM4");
				param5 = element.LookupParameter("PLUGIN_PARAM5");
				param6 = element.LookupParameter("PLUGIN_PARAM6");
				param7 = element.LookupParameter("PLUGIN_PARAM7");

				if (param1.AsInteger() &amp;lt; 1)
				{
					param1.Set(idForSynchro.param1);
				}

				string param6Value = DateTime.Parse(idForSynchro.data.param6, CultureInfo.InvariantCulture).ToLongDateString();
				string param7Value = DateTime.Parse(idForSynchro.data.param7, CultureInfo.InvariantCulture).ToLongDateString();

				Utils.SetParameterValueString(param2, idForSynchro.data.param2);
				Utils.SetParameterValueString(param3, idForSynchro.data.param2);
				Utils.SetParameterValueString(param4, idForSynchro.data.param4);
				Utils.SetParameterValueString(param5, idForSynchro.data.param5);
				Utils.SetParameterValueString(param6, param6Value);
				Utils.SetParameterValueString(param7, param7Value);                     

			}
			tr.Commit();
		}
}

// Method of Utils class that set Parameter value
 public static void SetParameterValueString(Parameter parameter, string value)
{
	if (parameter != null)
	{
		parameter.Set(value);
	}
}&lt;/LI-CODE&gt;</description>
      <pubDate>Thu, 03 Sep 2020 09:48:56 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9727166#M32088</guid>
      <dc:creator>f.djiomejoungleroi.Ext</dc:creator>
      <dc:date>2020-09-03T09:48:56Z</dc:date>
    </item>
    <item>
      <title>Re: Modify Shared Parameters for high number of family instance</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9728552#M32089</link>
      <description>&lt;P&gt;LookupParameter is unnecessarily costly.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There is no need to re-execute it for every parameter on every single element.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That is costing you a lot of time and hurting performance.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Every shared parameter is equipped with a GUID to identify it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Determine the GUID once only on the first element.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then, you can use the GUID to retrieve each parameter directly from the element without any LookupParameter searching through the entire list of parameters each time.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is my suggestion for an improvement:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="general"&gt;    class IdForSynchro
    {
      public ElementId RevitId { get; set; }
      public int Param1 { get; set; }
      public string Param2 { get; set; }
      public double Param3 { get; set; }
    }

    void modifyParameterValues( Document doc, IList&amp;lt;IdForSynchro&amp;gt; data )
    {
      using( Transaction tr = new Transaction( doc ) )
      {
        Guid guid1 = Guid.Empty;
        Guid guid2 = Guid.Empty;
        Guid guid3 = Guid.Empty;

        tr.Start( "synchro" );

        foreach( IdForSynchro d in data )
        {
          Element e = doc.GetElement( d.RevitId );

          if( Guid.Empty == guid1 )
          {
            guid1 = e.LookupParameter( "PLUGIN_PARAM1" ).GUID;
            guid2 = e.LookupParameter( "PLUGIN_PARAM2" ).GUID;
            guid3 = e.LookupParameter( "PLUGIN_PARAM3" ).GUID;
          }
          e.get_Parameter( guid1 ).Set( d.Param1 );
          e.get_Parameter( guid2 ).Set( d.Param2 );
          e.get_Parameter( guid3 ).Set( d.Param3 );
        }
        tr.Commit();
      }
    }&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I added this code in the original and updated forms to The Building Coder samples.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the diff between the two:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/jeremytammik/the_building_coder_samples/commit/fea7381f51b660fc9b5660c2e64f548623b11d8b" target="_blank"&gt;https://github.com/jeremytammik/the_building_coder_samples/commit/fea7381f51b660fc9b5660c2e64f548623b11d8b&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the current code there:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/jeremytammik/the_building_coder_samples/blob/master/BuildingCoder/BuildingCoder/CmdCreateSharedParams.cs#L547-L584" target="_blank"&gt;https://github.com/jeremytammik/the_building_coder_samples/blob/master/BuildingCoder/BuildingCoder/CmdCreateSharedParams.cs#L547-L584&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please let us know whether this helps.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please equip your code with a little benchmark timer stopwatch and let us know the processing time required before and after making this modification.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Sep 2020 21:10:29 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9728552#M32089</guid>
      <dc:creator>jeremytammik</dc:creator>
      <dc:date>2020-09-03T21:10:29Z</dc:date>
    </item>
    <item>
      <title>Re: Modify Shared Parameters for high number of family instance</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9730007#M32090</link>
      <description>&lt;P&gt;Thank you Jeremy,&lt;BR /&gt;&lt;BR /&gt;I apply the solution and got&amp;nbsp; execution time improved. here is some results before and after the modification.&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Number of Family instance&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Time before (ms)&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Time After(ms)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;58&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;896&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;794&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;375&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1958&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1549&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1052&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;16777&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8152&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;But there are always times when changes are not applied to the document.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 04 Sep 2020 14:47:07 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9730007#M32090</guid>
      <dc:creator>f.djiomejoungleroi.Ext</dc:creator>
      <dc:date>2020-09-04T14:47:07Z</dc:date>
    </item>
    <item>
      <title>Re: Modify Shared Parameters for high number of family instance</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9731133#M32091</link>
      <description>&lt;P&gt;Not sure if you caught it when you refactored, but in your original code you used param2 to set 2 and 3. Could that be affecting what your results are?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;May be good to throw in some Try/Catch block to try and see where or if it's failing or at least a Task dialog to tell user if a param is missing.&lt;/P&gt;</description>
      <pubDate>Sat, 05 Sep 2020 11:37:07 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/modify-shared-parameters-for-high-number-of-family-instance/m-p/9731133#M32091</guid>
      <dc:creator>Sean_Page</dc:creator>
      <dc:date>2020-09-05T11:37:07Z</dc:date>
    </item>
  </channel>
</rss>

