/// <summary> /// 加载连接池配置 /// 创建数据库连接池 /// </summary> /// <param name="name">配置文件名称</param> /// <returns></returns> private IDbConnection CreatePool(string name) { //只是在加载配置文件时同步;其它不同步 lock (lock_obj) { HikariDataSource hikari = null; if (dicSource.TryGetValue(name, out hikari)) { //先取一次 return(hikari.GetConnection()); } else { //配置文件 string file = Path.Combine(cfgPath, name + CfgExtension); if (!File.Exists(file)) { throw new Exception("没有配置文件" + file); } HikariConfig hikariConfig = new HikariConfig(); hikariConfig.DriverDir = null;//不再使用原来的默认 hikariConfig.LoadConfig(file); if (string.IsNullOrEmpty(hikariConfig.DriverDir)) { //说明没有在文件中配置 hikariConfig.DriverDir = this.DirverDir; } hikariConfig.DBTypeXml = this.PoolDriverXML; hikari = new HikariDataSource(hikariConfig); dicSource[name] = hikari; return(hikari.GetConnection()); } } }
private static void TestConnect() { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.DBType = "PostgreSQL"; hikariConfig.ConnectString = "Server = 127.0.0.1; Port = 5432; User Id = postgres; Password = 1234; Database = postgres;Pooling=true; "; //hikariConfig.DriverDir = "DBDrivers"; //hikariConfig.DriverDLL = "XXXX.dll"; //hikariConfig.DBTypeXml = "DBType.xml"; HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); // //hikariConfig.LoadConfig("Hikari.txt"); // hikariDataSource.LoadConfig(); // //HikariDataSource hikariDataSource = new HikariDataSource(); //hikariDataSource.LoadConfig("Hikari.txt"); //hikariDataSource.DBType = "PostgreSQL"; //hikariDataSource.ConnectString = "Server = 127.0.0.1; Port = 5432; User Id = postgres; Password = 1234; Database = postgres;Pooling=true; "; //hikariDataSource.DriverDir = "DBDrivers"; //hikariDataSource.DriverDLL = "XXXX.dll"; //hikariDataSource.DBTypeXml = "DBType.xml"; int num = 1000; Task[] tasks = new Task[num]; DateTime start = DateTime.Now; for (int i = 0; i < num; i++) { tasks[i] = Task.Factory.StartNew(() => { var connection = hikariDataSource.GetConnection(); if (connection != null) { var cmd = connection.CreateCommand(); cmd.CommandText = "select * from student"; var rd = cmd.ExecuteReader(); int datanum = 0; string data = ""; while (rd.Read()) { data += "ID:" + rd.GetInt32(0); data += ",Name:" + rd.GetString(1); Console.WriteLine(data); datanum++; } rd.Close(); cmd.Dispose(); connection.Close(); Console.WriteLine(datanum); } }); } Task.WaitAll(tasks); Console.WriteLine("时间:" + (DateTime.Now - start).TotalSeconds); }
private static void TestQuery() { string sql = "select * from person where id=@ID"; Dictionary <string, object> dic = new Dictionary <string, object>(); dic["ID"] = 1; HikariConfig hikariConfig = new HikariConfig(); hikariConfig.DBType = "PostgreSQL"; hikariConfig.ConnectString = "Server = 127.0.0.1; Port = 5432; User Id = postgres; Password = 1234; Database = postgres;Pooling=true; "; HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); var ds = hikariDataSource.ExecuteQuery(sql, dic); }
/// <summary> /// 加载连接池配置 /// </summary> /// <param name="name"></param> /// <returns></returns> private IDbConnection CreatePool(string name) { lock (lock_obj) { HikariDataSource hikari = null; if (dicSource.TryGetValue(name, out hikari)) { return(hikari.GetConnection()); } else { string file = Path.Combine(cfgPath, name + ".cfg"); if (!File.Exists(file)) { throw new Exception("没有配置文件" + file); } HikariConfig hikariConfig = new HikariConfig(); hikariConfig.LoadConfig(file); hikari = new HikariDataSource(hikariConfig); dicSource[name] = hikari; return(hikari.GetConnection()); } } }
//private static void TestBag() //{ // ConcurrentList<PoolEntry> connectionList = new ConcurrentList<PoolEntry>(); // int num = 100; // Task[] tasks = new Task[num]; // Task[] read = new Task[num]; // DateTime start = DateTime.Now; // //写入 // for (int i=0;i<num;i++) // { // var r= Task.Factory.StartNew(() => { // for (int j = 0; j < 10000; j++) // { // PoolEntry poolEntry = new PoolEntry(null, null); // connectionList.Push(poolEntry); // } // }); // tasks[i] = r; // } // //读取 // for (int i = 0; i < num; i++) // { // var r = Task.Factory.StartNew(() => // { // PoolEntry poolEntry = null; // while (!connectionList.IsEmpty) // { // connectionList.TryPop(out poolEntry); // } // }); // read[i] = r; // } // Task.WaitAll(read); // Task.WaitAll(tasks); // Console.WriteLine("时间:" + (DateTime.Now - start).TotalSeconds); //} private static void TestConnect() { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.DBType = "PostgreSQL"; hikariConfig.ConnectString = "Server = 127.0.0.1; Port = 5432; User Id = postgres; Password = 1234; Database = postgres;Pooling=true; "; //hikariConfig.DriverDir = "DBDrivers"; //hikariConfig.DriverDLL = "XXXX.dll"; //hikariConfig.DBTypeXml = "DBType.xml"; HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); // //hikariConfig.LoadConfig("Hikari.txt"); // hikariDataSource.LoadConfig(); // // var connection1 = hikariDataSource.GetConnection(); // var bulk= hikariDataSource.GetBulkCopy(); //DataTable dt = new DataTable(); //dt.TableName = "\"Student\""; //bulk.BulkCopy(dt); if (connection1 != null) { var cmd = connection1.CreateCommand(); cmd.CommandText = "select * from \"Person\""; // cmd.CommandText = "COPY \"Student\" FROM 'd:/test.csv' WITH CSV HEADER"; // cmd.ExecuteNonQuery(); var rd = cmd.ExecuteReader(); //int datanum = 0; //string data = ""; //while (rd.Read()) //{ // data += "ID:" + rd.GetInt32(0); // data += ",Name:" + rd.GetString(1); // Console.WriteLine(data); // datanum++; //} rd.Close(); // cmd.Dispose(); // connection1.Close(); // Console.WriteLine(datanum); } // // int num = 1000; //Task[] tasks = new Task[num]; //DateTime start = DateTime.Now; //for (int i = 0; i < num; i++) //{ // tasks[i] = Task.Factory.StartNew(() => // { // var connection = hikariDataSource.GetConnection(); // if (connection != null) // { // var cmd = connection.CreateCommand(); // cmd.CommandText = "select * from student"; // var rd = cmd.ExecuteReader(); // int datanum = 0; // string data = ""; // while (rd.Read()) // { // data+="ID:"+rd.GetInt32(0); // data+=",Name:"+ rd.GetString(1); // Console.WriteLine(data); // datanum++; // } // rd.Close(); // cmd.Dispose(); // connection.Close(); // Console.WriteLine(datanum); // } // }); //} //Task.WaitAll(tasks); //Console.WriteLine("时间:" + (DateTime.Now - start).TotalSeconds); }