PostgreSQL On Windows Process Connection Performance
本文主要对PostgreSql在Windows下的连接测试。
测试环境: Win7 x64, PostgreSql 10.1 x64
测试语言: VS2015 C#
因为Pg的数据库连接是开启进程来处理的,不像MySQL一样是线程处理。在Windows下开启进程是比较耗时耗资源,不像Linux开启进程。
所以,我做了个测试:循环开启200个线程分别去连接Pg,开启连接后不主动关闭;并且让线程等待300秒也不去主动关闭,以确认Pg开启的进程数。
测试结果: Pg进程数并不会随着连接数的增加而增加,而是保持一定数量不变。
而后,又修改代码,去掉多线程连接数据库,只用主线程连接,还是开200个连接,结果: Pg进程只增加了1,并保持不变。
注:正常情况下,什么都不做,系统会保持8个常驻进程。
以下是测试截图和测试代码:
using System;
using System.Threading;
using Pg.Model; namespace PgConnectTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("正在测试连接进程...200个进程");
int proCount = ;
while (proCount <= )
{
Console.WriteLine($"开启第{proCount}个线程连接Postgres...");
ThreadPool.QueueUserWorkItem(state =>
{
var db = new MesDbContext();
db.Users.Add(new User() {Account = "", Passwd = "", Label = "shanghai"});
db.SaveChanges();
Thread.Sleep();
});
proCount++;
Thread.Sleep();
}
}
}
}
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace Pg.Model
{
public class Model
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public DateTime CreTime { get; set; } = DateTime.Now;
public long? CreUid { get; set; }
public DateTime? UpdTime { get; set; }
public long? UpdUid { get; set; }
public string Remark { get; set; }
public bool IsDel { get; set; } = false;
} [Table("User")]
public class User : Model
{
//[Index(IsUnique = true)]
public string Account { get; set; }
public string Passwd { get; set; }
public string Label { get; set; }
} }
using System.Data.Entity;
using System.Data.Entity.Migrations; namespace Pg.Model
{
public class MesDbContext: DbContext
{
public MesDbContext():base("name=mes")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MesDbContext, MigrateConfig>());
} public DbSet<User> Users { get; set; }
} public class MigrateConfig : DbMigrationsConfiguration<MesDbContext>
{
public MigrateConfig()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
} }
========= 2017.11.19 以下===============
又经过推敲,其实跟写的代码有关系,
如果是用framework的线程池 ThreadPool.QueueUserWorkItem(state => { }); ,其实不会连续开启很多线程,差不多我测试的结果是开启7个线程。
如果是换作 Task.Run(() => { }); 任务,那么情况差不多,Pg进程开启的数量也是10几个。
但是,如果是直接 new Thread(() => {}) 方式,那么甚至会开启上百个Pg进程。
极端,如果是只使用主线程,那么只会开启一个Pg进程。
PostgreSQL On Windows Process Connection Performance的更多相关文章
- 为应用程序池“XX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误
场景 WCF应用程序部署在IIS7中,使用net.tcp协议对外给几百台客户端提供服务,应用程序池不断崩溃重启. 分析过程 在事件查看器中看到的错误信息类似于 为应用程序池“XX”提供服务的进程在与 ...
- IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页
因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...
- [转帖]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
[终极解决方案]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误.该进程 ID 为“XXXX”.数据字段包含错误号. ...
- IIS 为应用程序池提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误的解决方法
系统环境:Windows Server 2008 R2 64位, IIS 7.0 错误信息: 为应用程序池提供服务的进程在与 Windows Process Activation Service 通信 ...
- 在启动Windows Process Activation Service时,出现错误13:数据无效
在启动Windows Process Activation Service时,出现错误13:数据无效 1.错误原因: 当Windows Process Activation Service从C:\Wi ...
- Fixed: The Windows Process Activation Service service terminated with the following error: The system cannot find the file specified
I'm not yet clear what I did, but I'm blogging it so it can be found if someone else has this issue. ...
- 【必杀】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
之前写过一篇文章,https://www.cnblogs.com/qidian10/p/6028784.html 解释如何解决此类问题,但现在回过头来想一下,之前的文章还是太过浅显,无法完全有效的彻底 ...
- 通过ctypes获得python windows process的内存使用情况
通过ctypes 类库中的win32方法GetProcessMemoryInfo()获得当前进程的内存使用情况.该函数可以在32或者64位,python2.6+及python3.x之上都能有用. &q ...
- PostgreSQL在windows 10上的下载和安装
一.下载 PostgreSQL Windows版本下载地址: https://www.postgresql.org/download/windows/ 下载地址包含2个版本,根据个人喜好下载即可: 1 ...
随机推荐
- Centos7.6下使用docker方法安装stf
使用Docker镜像安装 一,在centos上安装Docker 很简单,直接 yum install docker 即可开启docker服务 在centos中开启服务可以使用systemctl sta ...
- [网络流24题] 最长K可重区间集问题
题目链接:戳我 当时刷24题的时候偷了懒,没有写完,结果落下这道题没有写qwq结果今天考试T3中就有一部分要用到这个思想,蒟蒻我硬是没有想到网络流呜呜呜 最大费用流. 就是我们考虑将问题转化一下,转化 ...
- Spring boot整合Mongodb
最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...
- threading.local()方法;线程池
一,threading.local() import time import threading v = threading.local() def func(arg): # 内部会为当前线程创建一个 ...
- 使用ls,du命令进行文件排序
一. 使用du命令进行大小排序 du -h --max-depth=1 | sort -hr 参数说明: --max-depth:表示要查看几层目录 sort -r:反向显示 sort -h: ...
- myeclipse部署项目到tomcat-custom_location 方式
在想要部署的路径下:1.新建一个在tomcat--->server.xml文件夹下设置的文件名 2.在新建的文件夹下新建一个 ROOT文件夹, 3.在myeclipse里面吧项目部署到 ROO ...
- 最短路 CF954D Fight Against Traffic
CF954D Fight Against Traffic 题意描述: 给你一张无向图,一共有n个点(2 <= n <= 1000),由m条边连接起来(1 <= m <= 100 ...
- python学习,day3: 文件的读写
# coding=utf-8 # Author: RyAn Bi import sys f1 = open('yesterday2',mode='w',encoding='utf-8') #w 只能写 ...
- 查看centos CPU、内存、版本等信息
2018-12-29 查看当前linux的系统版本 cat /etc/redhat-release 查看内核版本 uname -a 查看CPU是32位还是64位 getconf LONG_BIT 查看 ...
- 用servlet校验密码
一.结果图 package Login; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connect ...