根据当前的程序,有以下几个点进行改良
1 日志每次revit生成的之后,就不会del,下次再次生成的时候,发现有日志,就不会在生成。采用将日志的名字修改为时间戳,每次运行的时候,产生独立的日志文件。
示例代码
string date = DateTime.Now.ToLongDateString().ToString() + DateTime.Now.ToLongTimeString();
date = date.Replace(":", "_");
roller.File = @"EventLogByrevit" + date + ".txt";
这个代码放在log.cs中。在revit的命令中执行。这种方法调试的时候很有用。
2 在Model类中,增加一个每次都drop原来的库,单独重新生成一个库。
在Model类中的构造函数中增加
Database.SetInitializer<m构件>(new DropCreateDatabaseAlways<m构件>());
3 DB中增加一个时间字段,看是什么时间保存的数据。
4 DB中增加一个文件名的字段,这个文件名是全文件名,所以在类中设置这个属性的时候,要保持1000个字符左右。不然个别的会很长,在保持的时候会报错。
5 在保持的时候,因为构建比较多,从网站上下载构建
在Negut的控制台上,执行以下命令
Install-Package Z.EntityFramework.Extensions -Version 3.22.6
就会安装一个Extension,它支持批量保持。
6 如果数据量还是很大,那么就将数据分为10000个为一个单位,分的方法可参考
List<Entity.e构件实体> templist = new List<Entity.e构件实体>();
int separate = 10000;
int mod整数 = count / separate;
int mod余数 = count % separate;
for (int j = 1; j <= mod整数; j++)
{
templist.AddRange(l构件实体列表.Skip((j-1) * separate).Take(separate));
m.d构件实体数据处理.AddRange(templist);
m.BatchSaveChanges();
templist.Clear();
}
if (mod余数 != 0)
{
templist.AddRange(l构件实体列表.Skip(mod整数 * separate).Take(mod余数));
m.d构件实体数据处理.AddRange(templist);
m.BatchSaveChanges();
templist.Clear();
}
Common.utility.WriteDebugLog("数据库存储结束,采用了batchsavechange的方法。");
分为10000个为一个单位进行保持。
7 为了便于发现问题,在系统中增加日志的记录地方,采用
Common.utility.WriteDebugLog(string.Format("正在处理第{0}个文件,文件名是{1},一共有{2}个文件/r/n",i,filename, filenameList.Count()));
这种格式,比较好。
8 在Revit中执行一个目录下所有的revit文件。
打开一个revit文件,运行这个插件。
这个插件一开始采用以下的代码
string path = @"d:/1";
string[] filenameList = Directory.GetFiles(path, "*.rvt", SearchOption.AllDirectories);
app = commandData.Application.Application;
Document doc;
foreach (var x in filenameList)
{
Common.utility.WriteDebugLog(string.Format("个文件,文件名是{0}/r/n",x));
}
int i = 1;
foreach (var filename in filenameList)
{
Common.utility.WriteDebugLog(string.Format("正在处理第{0}个文件,文件名是{1},一共有{2}个文件/r/n",i,filename, filenameList.Count()));
i++;
9 ui的地方抽象一个类出来,将每个文档的处理逻辑放入到单独的一个类中
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/193615.html