GetModel<appfunc>(i,false) //24962 rows
vs
GetMode<appfunc>(i,true) //24962 rows
Six simple compute column make get model,time from 64ms to 1755ms(27 times),memory from 10M to 137M(13.7 times)?
Why?
Test again:
Core code:
public object FxDataStore2Model(int concurrent)
{
try
{
for (int i = 0; i < concurrent; i++)
{
List<appfunc> lst = new List<appfunc>();
for (int j = 0; j < FxDataInDataStore.RowCount; j++)
{
lst.Add(FxDataInDataStore.GetModel<appfunc>(j, true));
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return 0;
}
public object FxDataStore2ModelSimple(int concurrent)
{
try
{
for (int i = 0; i < concurrent; i++)
{
List<appfunc> lst = new List<appfunc>();
for (int j = 0; j < FxDataInDataStore.RowCount; j++)
{
lst.Add(FxDataInDataStore.GetModel<appfunc>(j, false));
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return 0;
}
using DWNet.Data;
using SnapObjects.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data;
using System.Text;
namespace FxPerformanceTest
{
[DataWindow("appfunc", DwStyle.Default)]
[FromTable("AppFunc", Schema = "fxprj00auth")]
#region DwSelectAttribute
[DwSelect(@" SELECT fxprj00auth.AppFunc.FuncID, fxprj00auth.AppFunc.FuncName, fxprj00auth.AppFunc.FuncTitle, fxprj00auth.AppFunc.FuncType, fxprj00auth.AppFunc.ParamNameValue, fxprj00auth.AppFunc.RelatedFuncID, fxprj00auth.AppFunc.Disabled, fxprj00auth.AppFunc.FlagDelete, fxprj00auth.AppFunc.SortID, fxprj00auth.AppFunc.Memo, fxprj00auth.AppFunc.ParentID, fxprj00auth.AppFunc.CreateDate, fxprj00auth.AppFunc.CreateUserID, fxprj00auth.AppFunc.UpdateDate, fxprj00auth.AppFunc.UpdateUserID, (CASE WHEN IsNull(fxprj00auth.AppFunc.ParentID,'0')='0' THEN fxprj00auth.AppFunc.FuncID ELSE fxprj00auth.AppFunc.ParentID+'__'+ fxprj00auth.AppFunc.FuncID END) AS SortInfo FROM fxprj00auth.AppFunc WHERE ('xxxxxx'='xxxxxx') ORDER BY (CASE WHEN IsNull(fxprj00auth.AppFunc.ParentID,'0')='0' THEN fxprj00auth.AppFunc.FuncID ELSE fxprj00auth.AppFunc.ParentID+'__'+ fxprj00auth.AppFunc.FuncID END) ,SortID")]
#endregion
[UpdateWhereStrategy(UpdateWhereStrategy.KeyColumns)]
[DwKeyModificationStrategy(UpdateSqlStrategy.Update)]
public class appfunc
{
//-----------------------------------------
//columns
[Key]
[DwColumn("AppFunc", "FuncID")]
public string funcid{get;set;}
[DwColumn("AppFunc", "FuncName")]
public string funcname{get;set;}
[DwColumn("AppFunc", "FuncTitle")]
public string functitle{get;set;}
[DwColumn("AppFunc", "FuncType")]
public string functype{get;set;}
[DwColumn("AppFunc", "ParamNameValue")]
public string paramnamevalue{get;set;}
[DwColumn("AppFunc", "RelatedFuncID")]
public string relatedfuncid{get;set;}
[DwColumn("AppFunc", "Disabled")]
public int? disabled{get;set;}
[DwColumn("AppFunc", "FlagDelete")]
public int? flagdelete{get;set;}
[DwColumn("AppFunc", "SortID")]
public int? sortid{get;set;}
[DwColumn("AppFunc", "Memo")]
public string memo{get;set;}
[DwColumn("AppFunc", "ParentID")]
public string parentid{get;set;}
[DwColumn("AppFunc", "CreateDate")]
public DateTime? createdate{get;set;}
[DwColumn("AppFunc", "CreateUserID")]
public string createuserid{get;set;}
[DwColumn("AppFunc", "UpdateDate")]
public DateTime? updatedate{get;set;}
[DwColumn("AppFunc", "UpdateUserID")]
public string updateuserid{get;set;}
[PropertySave(SaveStrategy.Ignore)]
[DwColumn("SortInfo")]
public string sortinfo{get;set;}
//-----------------------------------------
//computes
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total { get; set; }
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total1 { get; set; }
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total2 { get; set; }
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total3 { get; set; }
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total4 { get; set; }
[DwCompute(@"disabled+1+flagdelete+1+sortid+1")]
public int? total5 { get; set; }
}
public static class appfunc__extensions
{
public static object?[] Model2Buffer(this appfunc obj)
{
List<object> buffer = new List<object>();
buffer.Add(obj.funcid);
buffer.Add(obj.funcname);
buffer.Add(obj.functitle);
buffer.Add(obj.functype);
buffer.Add(obj.paramnamevalue);
buffer.Add(obj.relatedfuncid);
buffer.Add(obj.disabled);
buffer.Add(obj.flagdelete);
buffer.Add(obj.sortid);
buffer.Add(obj.memo);
buffer.Add(obj.parentid);
buffer.Add(obj.createdate);
buffer.Add(obj.createuserid);
buffer.Add(obj.updatedate);
buffer.Add(obj.updateuserid);
buffer.Add(obj.sortinfo);
buffer.Add(obj.total);
buffer.Add(obj.total1);
buffer.Add(obj.total2);
buffer.Add(obj.total3);
buffer.Add(obj.total4);
buffer.Add(obj.total5);
return buffer.ToArray();
}
public static TModel Buffer2Model<TModel>(this DataRow dataRow) where TModel : appfunc
{
object?[] buffer = dataRow.ItemArray;
appfunc obj = new appfunc();
obj.funcid = buffer[0] as string;
obj.funcname = buffer[1] as string;
obj.functitle = buffer[2] as string;
obj.functype = buffer[3] as string;
obj.paramnamevalue = buffer[4] as string;
obj.relatedfuncid = buffer[5] as string;
obj.disabled = buffer[6] as int?;
obj.flagdelete = buffer[7] as int?;
obj.sortid = buffer[8] as int?;
obj.memo = buffer[9] as string;
obj.parentid = buffer[10] as string;
obj.createdate = buffer[11] as DateTime?;
obj.createuserid = buffer[12] as string;
obj.updatedate = buffer[13] as DateTime?;
obj.updateuserid = buffer[14] as string;
obj.sortinfo = buffer[15] as string;
obj.total = buffer[16] as int?;
obj.total1 = buffer[17] as int?;
obj.total2 = buffer[18] as int?;
obj.total3 = buffer[19] as int?;
obj.total4 = buffer[20] as int?;
obj.total5 = buffer[21] as int?;
return obj as TModel;
}
}
}