using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
namespace ConsoleApp10
{
/* 总结:
* Copy属于深复制
* Clone属于浅复制
* Import深复制,但Coding方面比较复杂
*
* 资源争夺只发生在:读写同时进行的情况下,
* 在多线程的情况下,
* 所有线程都进行读操作或所有线程都进行写操作时,不会发生线程争夺问题
*/
class Program
{
static void Main(string[] args)
{
TableCopy();
TableClone();
TableImport();
Console.ReadKey();
}
static void TableCopy()
{
Console.WriteLine("Table Copy方法开始");
DataTable dt = new DataTable();
dt.Columns.Add("Time", Type.GetType("System.String"));
dt.Columns.Add("Weather", Type.GetType("System.String"));
dt.Columns.Add("Tempeture", Type.GetType("System.String"));
DataRow dr;
Random random = new Random();
Parallel.For(0, 100, i =>
{
dr = dt.NewRow();
dr[0] = DateTime.Now.ToString(string.Format("yyyy-MM-dd HH:mm:ss fff"));
dr[1] = ((Weather)random.Next(0, 4)).ToString();
dr[2] = random.Next(0, 40);
dt.Rows.Add(dr.ItemArray);
}
);
DataTable dtCpy = dt.Copy();
dt.Clear();
Console.WriteLine("复制表的行数:" + dtCpy.Rows.Count);
Console.WriteLine("初始表的行数:" + dt.Rows.Count);
Console.WriteLine("Table Copy方法结束");
Console.WriteLine("---复制表应该有100行数据,而初始表不应该有数据!");
}
static void TableClone()
{
Console.WriteLine("Table Clone方法开始");
DataTable dt = new DataTable();
dt.Columns.Add("Time", Type.GetType("System.String"));
dt.Columns.Add("Weather", Type.GetType("System.String"));
dt.Columns.Add("Tempeture", Type.GetType("System.String"));
DataRow dr;
Random random = new Random();
Parallel.For(0, 100, i =>
//for(int i=0;i<100;i++)
{
dr = dt.NewRow();
dr[0] = DateTime.Now.ToString(string.Format("yyyy-MM-dd HH:mm:ss fff"));
dr[1] = ((Weather)random.Next(0, 4)).ToString();
dr[2] = random.Next(0, 40);
dt.Rows.Add(dr.ItemArray);
}
);
DataTable dtCpy = dt.Clone();
//for(int i=0;i<20;i++)
Parallel.For(0, 20, i =>
{
dr = dt.NewRow();
dr[0] = DateTime.Now.ToString(string.Format("yyyy-MM-dd HH:mm:ss fff"));
dr[1] = ((Weather)random.Next(0, 4)).ToString();
dr[2] = random.Next(0, 40);
dtCpy.Rows.Add(dr.ItemArray);//该行已属于另一个表的解决方法
}
);
dt.Clear();
Console.WriteLine("克隆表的行数:" + dtCpy.Rows.Count);
Console.WriteLine("初始表的行数:" + dt.Rows.Count);
Console.WriteLine("Table Clone方法结束");
Console.WriteLine("---克隆表应该有20行数据,而初始表不应该有数据!");
}
static void TableImport()
{
Console.WriteLine("Table Import方法开始");
DataTable dt = new DataTable();
dt.Columns.Add("Time", Type.GetType("System.String"));
dt.Columns.Add("Weather", Type.GetType("System.String"));
dt.Columns.Add("Tempeture", Type.GetType("System.String"));
DataRow dr;
Random random = new Random();
//for(int i=0;i<100;i++)
Parallel.For(0, 100, i =>
{
dr = dt.NewRow();
dr[0] = DateTime.Now.ToString(string.Format("yyyy-MM-dd HH:mm:ss fff"));
dr[1] = ((Weather)random.Next(0, 4)).ToString();
dr[2] = random.Next(0, 40);
dt.Rows.Add(dr.ItemArray);
}
);
DataTable dtCpy = new DataTable();
Parallel.For(0, 50, i =>
{
dtCpy.ImportRow(dt.Rows[i]);
}
);
dt.Clear();
Console.WriteLine("导出表的行数:" + dtCpy.Rows.Count);
Console.WriteLine("初始表的行数:" + dt.Rows.Count);
Console.WriteLine("Table Import方法结束");
Console.WriteLine("---导出表应该有50行数据,而初始表不应该有数据!");
}
}
enum Weather
{
Sunny,
Rainy,
Windy,
Cloudy
}
}
关于Table复制的一些问题
最新推荐文章于 2023-07-26 11:41:19 发布