小编Tim*_*per的帖子

为什么RegOpenKeyEx()在Vista 64bit上返回错误代码2?

我正在拨打以下电话:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
Run Code Online (Sandbox Code Playgroud)

(C++,Visual Studio 5,Vista 64bit).

它失败了,错误代码2("找不到文件"),即使" regedit"表示密钥存在.这段代码一直在32位XP上运行.当它显然存在时,为什么它"找不到文件"?

c++ registry winapi wow64 windows-vista

29
推荐指数
2
解决办法
5万
查看次数

MeasureString()填充左侧和右侧的文本

我在C++中使用GDI +.(此问题也可能存在于C#中).

我注意到每当我调用Graphics :: MeasureString()或Graphics :: DrawString()时,字符串都会在左侧和右侧填充空格.

例如,如果我使用Courier字体(不是斜体!)而我测量"P"我得到90,但"PP"给我150.我希望等宽字体给出"PP"的两倍宽度.

我的问题是:这是有意或记录的行为,我该如何禁用它?

RectF Rect(0,0,32767,32767);
RectF Bounds1, Bounds2;
graphics->MeasureString(L"PP", 1, font, Rect, &Bounds1);
graphics->MeasureString(L"PP", 2, font, Rect, &Bounds2);
margin = Bounds1.Width * 2 - Bounds2.Width;
Run Code Online (Sandbox Code Playgroud)

gdi+ drawstring

17
推荐指数
3
解决办法
1万
查看次数

XML-RPC比普通XML有什么好处?

我的公司已经使用XML-RPC一段时间了,但最近我想知道XML-RPC与普通XML相比有什么好处.首先,它是可怕的"肥胖",考虑:

<struct>
    <member>
        <name>ROOM_ID</name>
        <value>
            <int>1</int>
        </value>
    </member>

    <member>
        <name>CODE</name>
        <value>
            <string>MR-101</string>
        </value>
    </member>

    <member>
        <name>NAME</name>
        <value>
            <string>Math Room</string>
        </value>
    </member>

    <member>
        <name>CAPACITY</name>
        <value>
            <int>30</int>
        </value>
    </member>
</struct>
Run Code Online (Sandbox Code Playgroud)

与此相比:

<room><ROOM_ID>1</ROOM_ID><CODE>MR-101</CODE>
<NAME>Math Room</NAME><CAPACITY>30</CAPACITY></room>
Run Code Online (Sandbox Code Playgroud)

甚至这个:

<room ROOM_ID=1 CODE=MR-101 NAME=”Math Room” CAPACITY=30 />
Run Code Online (Sandbox Code Playgroud)

其次,XML-RPC似乎相当普遍,但并不是普遍存在,我对C++和PHP中对它的支持印象不深.我在两种语言中尝试过的所有库都遇到了问题.

第三,在我看来,我可以像使用XML-RPC一样使用纯XML进行远程过程调用.{(9/9/2009):每种语言都有用于将语言级对象序列化为XML的库.XML和XML-RPC都需要定义应用程序级模式,例如,字段应如何拼写,但不需要定义任何其他模式.许多人使用纯XML进行RPC调用.}

那么XML-RPC的增值是什么?

xml xml-rpc

16
推荐指数
2
解决办法
7524
查看次数

std :: string与以null结尾的字符串相比有多高效?

我发现std::string与老式的以null结尾的字符串相比,s非常慢,速度非常慢,以至于它们将整个程序的速度降低了2倍.

我预计STL会变慢,我没有意识到它会慢得多.

我正在使用Visual Studio 2008,发布模式.它显示字符串的char*赋值比赋值慢100-1000倍(测试char*赋值的运行时非常困难).我知道这不是一个公平的比较,指针赋值与字符串复制,但我的程序有很多字符串赋值,我不确定我可以在所有地方使用" const引用 "技巧.通过引用计数实现,我的程序可以很好,但这些实现似乎不再存在.

我真正的问题是:为什么人们不再使用引用计数实现,这是否意味着我们都需要更加谨慎地避免std :: string的常见性能缺陷?

我的完整代码如下.

#include <string>
#include <iostream>
#include <time.h>

using std::cout;

void stop()
{
}

int main(int argc, char* argv[])
{
    #define LIMIT 100000000
    clock_t start;
    std::string foo1 = "Hello there buddy";
    std::string foo2 = "Hello there buddy, yeah you too";
    std::string f;
    start = clock();
    for (int i=0; i < LIMIT; i++) {
        stop();
        f = foo1;
        foo1 = foo2;
        foo2 = f;
    }
    double …
Run Code Online (Sandbox Code Playgroud)

c++ performance stl

13
推荐指数
5
解决办法
2万
查看次数

AppEngine数据存储区:"具有id ...的对象由不同的对象管理器管理"

我正在使用Google AppEngine和Java.当我使用一些数据存储功能时,我收到一条错误消息:

Object with id "edvaltt.Teacher@64064b" is managed by a different Object Manager
Run Code Online (Sandbox Code Playgroud)

我不知道这意味着什么或如何解决它或在哪里寻找有关此错误的文档.谁能帮我?我正在使用的代码是:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class School {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private String shortname;

@Persistent
private String fullname;

@Persistent
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="code asc"))
private List<Teacher> Teachers;

...

public Teacher FindOrCreateTeacher(String code)
{
    // Can we find the teacher without any database code?
    Teacher newTeacher = FindTeacher(code);
    if (newTeacher != null)
        return newTeacher;

    // Create the teacher:
    PersistenceManager pm = PMF.get().getPersistenceManager();
    Transaction tx = pm.currentTransaction(); …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine

12
推荐指数
1
解决办法
8046
查看次数

GWT编译器内存不足.如何在IntelliJ中配置它?

我在IntelliJ中运行GWT.(普通GWT,IntelliJ v9).我能够通过我的"GWT开发模式"配置运行我的应用程序,但是当我尝试通过我的"本地tomcat"配置运行它时,我得到了一堆难以理解的错误消息,引用了Oracle和各种奇怪的东西,我没有使用,接着是这个错误,它被排序到所有其他的底部:

错误:内存不足; 要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M ...)

我猜这个错误是根本原因.

根据我的理解,有一个GWT编译步骤,它在一个独立于IntelliJ和tomcat的JVM中运行,所以我不确定在哪里设置-Xmx参数.

我的问题是:我在哪里找到这个-Xmx参数?(而且:我是在正确的轨道上,从表面上看这个错误信息,还是更深层次问题的症状?)

gwt intellij-idea gwt-compiler

12
推荐指数
1
解决办法
7997
查看次数

奇怪的Tomcat中断,可能与maxConnections有关

在我的公司,我们今天遇到了严重的问题:我们的生产服务器出现故障.大多数通过浏览器访问我们软件的人无法获得连接,但是已经使用该软件的人能够继续使用它.甚至我们的热备用服务器也无法与生产服务器通信,它使用HTTP进行通信,甚至无法访问更广泛的互联网.服务器可以通过ping和ssh访问的整个时间,实际上是非常负载 - 它通常以5%的CPU负载运行,此时甚至更低.我们几乎没有磁盘i/o.

问题开始几天后,我们有了一个新的变化:端口443(HTTPS)正在响应,但端口80停止响应.服务器负载非常低.重启tomcat后,端口80立即开始响应.

我们使用tomcat7,maxThreads ="200",并使用maxConnections = 10000.我们从主内存中提供所有数据,因此每个HTTP请求都很快完成,但是我们有大量用户进行非常简单的交互(这是高中科目选择).但我们似乎不太可能拥有10,000个用户,同时他们的浏览器在我们的页面上打开.

我的问题有几个部分:

  • "maxConnections"参数可能是导致我们困境的原因吗?
  • 有没有理由不将"maxConnections"设置为可笑的高值,例如100,000?(这样做的成本是多少?)
  • 一旦命中"maxConnections"消息,tomcat会在任何地方输出警告消息吗?(我们没有注意到任何事情).
  • 我们可能会遇到操作系统限制吗?我们使用的是CentOS 6.4(Linux),"ulimit -f"表示"无限制".(防火墙是否了解Tcp/Ip连接的概念?其他地方是否存在限制?)
  • 当tomcat达到"maxConnections"限制时会发生什么?它是否尝试关闭一些不活动的连接?如果没有,为什么不呢?我不喜欢这样的想法,即我们的服务器可以被拥有浏览器的人赎金,发送保持活动以保持连接打开.

但主要问题是,"我们如何修复我们的服务器?"

按照Stefan和Sharpy的要求提供更多信息:

  • 我们的客户直接与此服务器通信
  • 在某些情况下,TCP连接立即被拒绝,在其他情况下超时
  • 即使将我的浏览器连接到网络中的服务器,或者与热备用服务器(也在同一网络中)无法进行通常通过HTTP发生的数据库复制消息,问题就很明显了.
  • IPTables - 是的,IPTables6 - 我不这么认为.无论如何,当我在注意到问题后进行测试时,我的浏览器和服务器之间没有任何内容.

更多信息:当我们意识到我们使用的是BIO的默认Tomcat7设置(每个连接有一个线程,并且我们有maxThreads = 200)时,看起来我们已经解决了问题.实际上'netstat -an'显示了大约297个连接,它们匹配200 + 100的队列.所以我们将其更改为NIO并重新启动了tomcat.不幸的是,第二天发生了同样的问题.我们可能错误配置了server.xml.

来自catalina.out的server.xml和摘录可在此处获取:https://www.dropbox.com/sh/sxgd0fbzyvuldy7/AACZWoBKXNKfXjsSmkgkVgW_a?dl = 0

更多信息:我做了负载测试.我可以从我的开发笔记本电脑创建500个连接,并且每个都进行3次HTTP GET,没有任何问题.除非我的负载测试无效(Java类也在上面的链接中).

linux tomcat tomcat7

10
推荐指数
1
解决办法
2281
查看次数

Java中的OpenCv:不推荐使用DescriptorExtractor.我该用什么呢?

我有一些示例代码使用OpenCV(Java包装器)将2个图像拼接在一起.它引用了一个不推荐使用的类"DescriptorExtractor".我在官方网站文档或源代码中找不到任何关于我应该使用的信息.当某些东西被弃用时,我总是很生气,而且它并没有告诉你应该使用什么.

谁能帮我?

我正在使用OpenCV 3.4.1和预构建的Windows库.

该课程的官方文档似乎在这里.

"FeatureDetector"类同样被弃用,同样没有任何关于使用什么的提示.

java opencv opencv-stitching

10
推荐指数
1
解决办法
910
查看次数

如何刷新'RandomAccessFile'(java)?

我在java中使用RandomAccessFile:

file = new RandomAccessFile(filename, "rw");
...
file.writeBytes(...);
Run Code Online (Sandbox Code Playgroud)

如何确保将此数据刷新到操作系统?没有file.flush()方法.(请注意,我实际上并不期望它是物理写入的,我很满意它被刷新到操作系统,因此数据将在tomcat崩溃中存活,但不一定是意外的服务器断电).

我在Linux上使用tomcat6.

java flush

9
推荐指数
3
解决办法
7104
查看次数

VisualStudio2008上的std :: vector似乎是次优实现的 - 复制构造函数调用太多

我一直在比较流行的XmlRpc库的STL实现与主要避免STL的实现.STL实现速度要慢得多 - 我将47s降低到4.5s.我已经诊断出一些原因:部分原因是由于std :: string被误用(例如作者应该尽可能使用"const std :: string&" - 不要只使用std :: string's,就好像他们一样是Java字符串),但它也是因为每次向量超出其边界时都会不断地调用复制构造函数,这是非常频繁的.复制构造函数非常慢,因为它们执行了树的深层复制(XmlRpc值).

StackOverflow上的其他人告诉我,std :: vector实现通常会在每次超出缓冲区时将缓冲区的大小加倍.在VisualStudio 2008上似乎并非如此:向std :: vector添加50个项目需要对复制构造函数进行177次调用.每次加倍应该调用复制构造函数64次.如果你非常担心保持较低的内存使用率,那么每次增加50%应该调用复制构造函数121次.那么177来自哪里?

我的问题是:(a)为什么复制构造函数经常被调用?(b)如果您只是一个对象从一个位置移动到另一个位置,是否有任何方法可以避免使用复制构造函数?(在这种情况下,实际上大多数情况下memcpy()就足够了 - 这会产生很大的不同).

(注意:我知道vector :: reserve(),我只是有点失望,应用程序员需要实现加倍技巧,这样的东西已经是任何好的STL实现的一部分.)

我的测试程序:

#include <string>
#include <iostream>
#include <vector>



using namespace std;


int constructorCalls;
int assignmentCalls;
int copyCalls;


class C {
    int n;

public:
    C(int _n) { n = _n; constructorCalls++; }
    C(const C& orig) { copyCalls++; n = orig.n; }
    void operator=(const C &orig) { assignmentCalls++; n = orig.n; }
};



int main(int …
Run Code Online (Sandbox Code Playgroud)

c++ stl

7
推荐指数
3
解决办法
1131
查看次数