- 浏览: 452601 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (267)
- java (8)
- 求职&面试 (1)
- linux (33)
- windows (1)
- C++ (5)
- android (12)
- QT (1)
- 经验 (1)
- memory-leaks (1)
- Streaming&V/A (1)
- network&security (5)
- SCM (13)
- mysql (10)
- browsers (4)
- Windows APIs (2)
- opensource (1)
- pm (1)
- GDI (1)
- database (14)
- MFC (1)
- web&fronts (17)
- Tomcat (4)
- OLE (1)
- 观后感 (1)
- Production (2)
- UML (3)
- Javascript (7)
- Cloud Computing&SAAS (5)
- SoftwareEngineering (1)
- Computer&Maintenance (1)
- Web (8)
- Desgin (1)
- J2ee (10)
- mysql cluster (0)
- LB&HA (2)
- webserver (11)
- php (5)
- cas&authtication (0)
- Languages (1)
- IDEs (3)
- architecture (2)
- iOS (8)
- spring (3)
- webservices (1)
- security (1)
- MVCFrameworks (2)
- bservices (0)
- build-tools (2)
- unittest (1)
- spring-security (0)
- sphinx (2)
- hibernate (1)
- mybatis (2)
- search (0)
- nginx (2)
- design&production (2)
- DFS (0)
- algorithm (0)
- distributed&network (0)
- blogs (0)
- os&admin (0)
- fastcgi (0)
- kv-db (0)
- operation&maintenance (1)
- productions (9)
- 养生 (1)
- appserver (1)
- HTTP (2)
- test (1)
- erlang (2)
- browser (0)
- 非技术 (2)
- mobiles (2)
- cloud computing (2)
- Business (2)
- maven (1)
- python (5)
- 人生 (0)
- Cryptography (3)
- CV (0)
- cms (2)
- jqm (2)
- html (2)
- flex (1)
- redmine (1)
- iptables (1)
- groovy (1)
- scala (1)
- grails (1)
- ftp (3)
- vsftpd (2)
- lua (0)
- chroot (3)
- jailkit (3)
- UED (0)
- myeclipse (2)
- ide (2)
- eclipse (2)
最新评论
-
Nick712:
http://blog.csdn.net/victory08/ ...
处理SVN出现:Cleanup failed to process the following paths: xxx -
xs6262460:
Spring AOP根据JdbcTemplate方法名动态设置数据源 -
xhpscdx:
我的解决办法是把D:\ACRS\Projects\TAIS 下 ...
处理SVN出现:Cleanup failed to process the following paths: xxx -
hnraysir:
总结得相当不错,支持下。
使用CodeIgniter 创建 RESTful 服务 REST API【原创译文】 -
云上太阳:
这个必须评论下,间接的救过俺的命啊
解决tomcat启动报错,加强错误日志的显示:
C/C++&Java 字符串拼接效率对比
C/C++拼接字符串的方式很多,尤其是所谓的”VC++”语言(不应该称其为语言,但是很多使用VC++的程序员却把它变成了VC++语言即微软血统的C++语言)中这种方式又变多一些。在Windows下的Visual C++中很多的程序员习惯使用微软MFC中CString 。虽然使用MFC编程时使用CString来处理字符串的确有着与MFC库配合的便利。但是在开发中如果并没有用到MFC的时候我建议还使用 Standard C++的字符串。好处很多首先它是标准的意味着你使用它(std::string, std::wstring)来处理字符串。并且你的程序没有使用与具体操作系统相关的API (或使用了跨平台的相关类库代替)。 那么意味着你的代码在有对应平台的并且符合C++标准的编译器下可以直接编译通过。也意味着你的程序具备较好的跨平台能力。另外在性能方面也较为出色。下面测试了一下在VC++2008中各种字符串拼接方式的性能对比。当然这里面有有预分配方式的,测试程序中最后会根据每一项的耗时进行排序,当然排序的结果需要看是否采用预分配方式。当然C++ std::string, std::wstring中有一些提高效率的机制(在非预分配方式下)。然后又在Java中测试了一下字符Java的StringBuffer及StringBuilder字符串拼接效率也很不错。最后测试的结果有助于指导我们使用最高效的方式处理字符处拼接。
字符串拼接测试方式分别是:
1. C语言在预分配内存上的strcpy函数
2. C语言在预分配内存上的 memcpy函数
3. C++中std::string的 append函数
4. C++中std::string 的 operator+=
5. C++中std::ostringstream的 operator<<
6. C++中std::string使用事先预分配(调用 reserve函数)
7. MFC中CString的Append函数
8. MFC中CString的operator+=
以下测试代码:
注:在 const int TEST_TIMES = 9000000;时C的memcpy使用16-32 ms(毫秒) std::string 也在 1000 ms(毫秒)左右。由于其他的方式耗时过长因此将 TEST_TIMES = 90000次 在Java中普通的String也是如此.
#include "stdafx.h"
#include <string>
#include <sstream>
#include <iostream>
#include <cassert>
#include <cstring>
#include <ctime>
#include <vector>
#include <algorithm>
#include <afxwin.h>
using namespace std;
const int TEST_TIMES = 90000;
const char APPEND_CONTENT[] = "cppmule";
const int PREALLOCATE_SIZE = strlen(APPEND_CONTENT) * TEST_TIMES + 1;
class Statistic {
public:
string item;
int used;
friend inline ostream & operator << (ostream & os, const Statistic &stat) {
os << "item: " << stat.item << endl
<< "used: " << stat.used << " ms." << endl << endl;
return os;
}
inline bool operator>(const Statistic& stat) {
return (used > stat.used);
}
inline bool operator<(const Statistic& stat) {
return (used < stat.used);
}
};
vector<Statistic> g_statistics;
#define BEGIN_TICK() \
clock_t start = clock();
#define END_AND_PRINT_TICK(info) \
clock_t used = clock() - start; \
Statistic stat; \
stat.item.assign(info); \
stat.used = used; \
g_statistics.push_back(stat); \
cout << info << " Used: " << used << " ms." << endl;
#define PRINT_SORT_TEST_TICKS() \
sort(g_statistics.begin(), g_statistics.end()); \
struct StatisticPrinter { \
StatisticPrinter() : order(0) {} \
void operator() (const Statistic& stat) { \
++order; \
cout << "sort order: " << order << endl \
<< stat; \
} \
int order; \
} printer; \
cout << "---------Statistics informations(sorting ascendent)-------" << endl << endl; \
for_each(g_statistics.begin(), g_statistics.end(), printer);\
cout << "----------------------------------------------------------" << endl;
void test_stdstring_append()
{
string str;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
str.append(APPEND_CONTENT);
}
END_AND_PRINT_TICK("std::string append");
cout << "string length: " << str.length() << endl;
}
void test_stdstring_append_operator()
{
string str;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
str += APPEND_CONTENT;
}
END_AND_PRINT_TICK("std::string += operator");
cout << "string length: " << str.length() << endl;
}
void test_stdostringstream()
{
ostringstream oss;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
oss << APPEND_CONTENT;
}
END_AND_PRINT_TICK("std::ostringstream <<");
cout << "string length: " << oss.str().length() << endl;
}
void test_stdostringstream_preallocate()
{
ostringstream oss;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
oss << APPEND_CONTENT;
}
END_AND_PRINT_TICK("std::ostringstream <<");
cout << "string length: " << oss.str().length() << endl;
}
void test_stdstring_append_operator_preallocate()
{
string str;
str.reserve(PREALLOCATE_SIZE);
cout << "capacity: " << str.capacity() << endl
<< "size: " << str.size() << endl;
//assert(str.capacity() == 1024*1024*512);
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
str += APPEND_CONTENT;
}
END_AND_PRINT_TICK("hava resize(PREALLOCATE_SIZE) std::string += operator");
cout << "string length: " << str.length() << endl;
}
void test_c_strcat_append()
{
char* pstr = (char*)malloc(PREALLOCATE_SIZE);
memset(pstr, 0, sizeof(pstr));
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
strcat(pstr, APPEND_CONTENT);
}
END_AND_PRINT_TICK("c string function strcat:");
cout << "string length: " << strlen(pstr) << endl;
free(pstr);
pstr = NULL;
}
void test_c_memcpy_append()
{
//Allocate memory
char* pstr = (char*)malloc(PREALLOCATE_SIZE);
if (NULL == pstr) {
cerr << "Can't allocate memory." << endl;
return;
}
memset(pstr, 0, PREALLOCATE_SIZE);
BEGIN_TICK();
int len = 0;
for (int i=0; i<TEST_TIMES; i++) {
memcpy(pstr + len, APPEND_CONTENT, strlen(APPEND_CONTENT));
len += strlen(APPEND_CONTENT);
}
END_AND_PRINT_TICK("C language memcpy append");
cout << "string length: " << strlen(pstr) << endl;
//Cleanup
free(pstr);
pstr = NULL;
}
void test_mfc_cstring_append()
{
CString str;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
str.Append(APPEND_CONTENT);
}
END_AND_PRINT_TICK("MFC CString append");
cout << "string length: " << str.GetLength() << endl;
}
void test_mfc_cstring_append_operator()
{
CString str;
BEGIN_TICK();
for (int i=0; i<TEST_TIMES; i++) {
str += APPEND_CONTENT;
}
END_AND_PRINT_TICK("MFC CString operator append");
cout << "string length: " << str.GetLength() << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _DEBUG
cout << "DEBUG version." << endl;
#else
cout << "Release version." << endl;
#endif
cout << "TEST_TIME: " << TEST_TIMES << endl;
test_c_memcpy_append();
test_stdstring_append_operator();
test_stdstring_append();
test_stdostringstream();
test_stdstring_append_operator_preallocate();
test_mfc_cstring_append();
test_mfc_cstring_append_operator();
test_c_strcat_append();
PRINT_SORT_TEST_TICKS();
return 0;
}
请接下部。。。
- C_C___Java_Strings_append_performance_match.rar (26.9 KB)
- 下载次数: 94
- string_append_performance_src.rar (7.6 KB)
- 下载次数: 62
评论
public static void testJavaStringPerformance2() {
final int TEST_TIMES = 100000;
//String
String str = "";
System.out.println("The testing is running, please wait...");
// 使用纳秒作为时间计量单位,更加精确点
long start = System.nanoTime();
for (int i=0; i<TEST_TIMES; i++){str += "cppmule";}
long strUsed = System.nanoTime() - start;
System.out.println("strUsed: " + strUsed/1000000f + " ms.");
// 这句是为了清楚当前的环境对下面的测试的影响,保留只是为了使测试更加的准确
str=null; System.gc();
//StringBuffer
start = System.nanoTime();
// 构造函数中的参数如果等于整个结果的长度,那么速度将达到最快!
StringBuffer strBuffer = new StringBuffer( TEST_TIMES*7 );
for (int i=0; i<TEST_TIMES; i++){strBuffer.append("cppmule");}
long strBufferUsed = System.nanoTime() - start;
System.out.println("StringBuffer append: " + strBufferUsed/1000000f + " ms.");
// 这句是为了清楚当前的环境对下面的测试的影响,保留只是为了使测试更加的准确
strBuffer.delete(0, strBuffer.length() ); strBuffer = null; System.gc();
//StringBuilder
start = System.nanoTime();
StringBuilder strBuilder = new StringBuilder( TEST_TIMES*7 );
for (int i=0; i<TEST_TIMES; i++){strBuilder.append("cppmule");}
long strBuilderUsed = System.nanoTime() - start;
System.out.println("StringBuilder append: " + strBuilderUsed/1000000f + " ms.");
System.out.println("Times: " + TEST_TIMES);
}
public static void main(String[] args) {
testJavaStringPerformance2();
}
在java中,其实,还有更加快的字符串拼接方法:就是自己靠char[]来组装。StringBuidler的实现原理也就是这样实现的。
什么意思大家多知道的。
文档时*.docx的
文档时*.docx的
JAVA的呢。?
相关推荐
北京交通大学 901 软件工程 2020 年真题.pdf
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
【2025最新Java面试宝典】 ElasticSearch面试题(31道含答案)
基于PySide6开发的Office文本批量替换工具,可对办公文档进行脱敏处理。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
标题SpringBoot在昆仑科技文献系统中的应用研究AI更换标题第1章引言介绍SpringBoot框架在昆仑科技文献系统中的研究背景、意义、现状以及论文的方法和创新点。1.1研究背景与意义分析SpringBoot框架在文献系统领域的应用价值。1.2国内外研究现状综述SpringBoot框架在文献系统中的应用情况和发展趋势。1.3论文方法与创新点阐述本文采用的研究方法和创新点。第2章SpringBoot框架概述详细介绍SpringBoot框架的基本概念、核心特性和优势。2.1SpringBoot简介概述SpringBoot的定义、发展历程和基本特点。2.2核心组件与工作原理解释SpringBoot的核心组件及其工作原理。2.3SpringBoot的优势分析SpringBoot框架相比其他框架的优势。第3章昆仑科技文献系统分析对昆仑科技文献系统进行详细的需求分析和功能设计。3.1系统需求分析明确昆仑科技文献系统的功能需求和性能需求。3.2系统功能设计根据需求分析结果,设计昆仑科技文献系统的功能模块。3.3数据库设计设计满足系统需求的数据库结构。第4章SpringBoot在昆仑科技文献系统
2024日本美妆市场洞察报告-大数跨境
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
app开发
内容概要:本文全面介绍了MySQL数据库系统的安装、配置、管理及优化。首先概述了MySQL的历史和发展,强调其开源、跨平台、高性能等特点。接下来详细讲解了在Windows和Linux平台上安装MySQL的具体步骤,包括下载安装包、配置服务和环境变量等。此外,还涵盖了MySQL的初始化配置,如设置root密码、创建数据库和调整配置文件。针对MySQL的安全性,讨论了用户权限管理、防火墙配置等方面。最后,探讨了性能优化的方法,包括调整性能参数、使用监控工具和优化查询等。 适合人群:数据库管理员、运维工程师、开发人员,尤其是那些希望深入了解MySQL安装、配置和优化的人群。 使用场景及目标:①帮助用户快速掌握MySQL的安装和配置流程;②指导用户进行有效的MySQL安全管理;③提供性能优化技巧,以提高数据库的响应速度和稳定性。 其他说明:本文不仅提供了理论知识,还附带了大量的实际操作示例,方便读者理解和实践。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
摘 要 I Abstract II 目 录 III 第一章 课题背景及研究内容 1 1.1 课题背景 1 1.2 开发目的和意义 1 1.3 论文研究内容 1 第二章 相关技术 3 2.1 B/S结构 3 2.2 MySQL数据库 3 第三章 系统分析 5 3.1可行性分析 5 3.1.1时间可行性 5 3.1.2 经济可行性 5 3.1.3 操作可行性 5 3.1.4 技术可行性 5 3.1.5 法律可行性 5 3.2系统流程分析 6 3.3系统功能需求分析 7 3.4 系统非功能需求分析 7 第四章 系统设计 9 4.1 总体功能 9 4.2 系统模块设计 9 4.3 数据库设计 10 4.3.1 数据库设计 10 4.3.2 数据库E-R 图 10 4.3.3 数据库表设计 11 第五章 系统实现 13 5.1 管理员功能模块的实现 13 5.1.1 用户列表 13 5.1.2 预算信息管理 13 5.1.3 预算类型管理 14 第六章 系统测试 15 6.1软件测试 15 6.2测试环境 16 6.3 测试用例 16 6.3.1 用户登录测试 16 6.4.2 添
uniapp基础框架,可直接使用
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
电商技术_WordPress_UniApp_积分商城_微信小_1742855265.zip
2024年中国房地产市场展望报告-第一太平戴维斯
docker 一个在springboot项目部署在docker中的实例.
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。