小编Joh*_*ter的帖子

我怎样才能改进/替换sprintf,我认为这是一个性能热点?

通过剖析,我发现这里的sprintf需要很长时间.是否有更好的替代方案仍然处理y/m/dh/m/s字段中的前导零?

SYSTEMTIME sysTime;
GetLocalTime( &sysTime );
char buf[80];
for (int i = 0; i < 100000; i++)
{

    sprintf(buf, "%4d-%02d-%02d %02d:%02d:%02d",
        sysTime.wYear, sysTime.wMonth, sysTime.wDay, 
        sysTime.wHour, sysTime.wMinute, sysTime.wSecond);

}
Run Code Online (Sandbox Code Playgroud)

注意:OP在评论中解释说这是一个精简的例子."真实"循环包含使用来自数据库的不同时间值的附加代码.分析已经确定sprintf()为罪犯.

c c++ performance printf strftime

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

glibc是否实现了fprintf()线程安全?

fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.

编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.

查看该文件,一些写入混合在一起.

编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor

问题

通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:

  • mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
  • mod_status将有n个独立的计数器,每个进程一个.
  • mod_rrdtool将失败,因为它收到两次相同的时间戳.
  • mod_uploadprogress将不会显示正确的状态.

c printf multithreading posix lighttpd

8
推荐指数
2
解决办法
1万
查看次数

通过引用将变量传递给PHP扩展

我正在编写一个PHP扩展,它接受一个值并改变它.示例PHP:

$someVal = "input value";
TestPassRef($someVal);
// value now changed
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

php pass-by-reference php-extension

8
推荐指数
1
解决办法
1740
查看次数

Pydev,自动代码格式化eclipse项目中的所有文件

请建议一种使用pydev自动代码格式自动格式化eclipse项目中所有py文件的方法.我们正在使用pydev代码格式化程序来使我们的代码保持一致,并且非常希望将所有文件标准化.

由于我们在pydev中启用了代码格式化,因此每次pydev触及py文件时,只有代码格式化清理才会在许多地方进行更改.我们希望在整个项目中一次性完成.

谢谢

code-formatting pydev

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

移动友好的数字输入+空格字符串(信用卡号)

我有一个信用卡号输入表单,将由移动和非移动浏览器使用.

我想暗示键盘应出现在手机上,并允许(可选)空格,因此应接受"4111 1234 1234 1234"或"4111123412341234".

根据我的发现,选项是:

a)<input type="tel"/>- 这看起来像我想要的那样(至少使用当前的移动浏览器),但它在语义上是错误的.

b)<input type="text" pattern="[\d ]*"/>或类似的 - iPhone识别某些模式([0-9]*,\d*)与键盘一起工作,但这在Android上不起作用.此外,我不确定iPhone是否会为允许空间提供任何模式,但我现在还没有iPhone可供检查.

c)尝试使用Javascript进行浏览器检测并使用(a)用于移动设备和(b)用于非移动设备.Cludgy,并没有真正的好处(a).

<input type="number"/>因为Chrome至少会将这样的输入强制转换为数字,因此用空格来打破输入,这似乎是一个非启动者.

是否有一种更好的方法来暗示移动浏览器,他们应该提供一个小工具而不是使用type="tel"

编辑:

也许-webkit-*可以应用于普通文本输入字段的属性暗示应该显示小键盘?

keyboard html5 credit-card input

8
推荐指数
2
解决办法
6886
查看次数

如何让NumberFormatter以负号打印负货币值?

我正在使用PHP NumberFormatter类来打印货币值.

例如:

  $cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
  $cFormatter->formatCurrency(123, 'USD');
  $cFormatter->formatCurrency(123, 'BRL');
  $cFormatter->formatCurrency(123, 'GBP');
Run Code Online (Sandbox Code Playgroud)

这工作正常,并按预期分别返回"$123.00","R$123.00" "£123.00.

但负数字印在"会计风格"上,用括号括起来,而不是前导减去" - ".

例如:

$cFormatter->formatCurrency(-456, 'USD');
Run Code Online (Sandbox Code Playgroud)

返回"($456.00)",而我想要"-$456.00".当然有一种简单的方法可以做到这一点?

我可以通过覆盖前缀和后缀删除括号,如下所示:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
Run Code Online (Sandbox Code Playgroud)

但后来我没有货币符号,例如"-456.00".

在设置NEGATIVE_PREFIX属性时,是否需要使用货币符号的转义码?

编辑:我很高兴设置一个不同的区域设置,如果这给了我正在寻找的结果.

编辑2:查看Intl库文档(这是用于实现NumberFormatter的库),以下看起来很有希望:

¤(\ u00A4):前缀或后缀:无货币符号,替换为货币符号.如果加倍,则用国际货币符号代替.如果是三倍,则替换为货币复数名称,例如美国的"美元"或"美元".如果存在于模式中,则使用货币小数分隔符而不是小数分隔符.

但是这个:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
Run Code Online (Sandbox Code Playgroud)

只需打印"-¤123",就没有喜悦.

编辑3:我想我找到了答案,见下文.

php currency numberformatter intl

7
推荐指数
1
解决办法
3588
查看次数

如何在Joomla中使用memcached

如何在Joomla中使用memcache?我是这个领域的新手,所以请描述你的答案.

php mysql joomla memcached

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

这是一种与子进程共享只读内存的安全方法吗?

我想分配并初始化一大块连续的内存(~1GB),然后将其标记为只读并分叉多个(比如几十个)将使用它的子进程,而不制作自己的内存副本(机器没有足够的内存().

我是否正确地认为如果我malloc像往常一样将内存标记为只读mprotect(addr, size, PROT_READ),然后fork,这将允许子进程安全地使用内存而不会导致它被复制?(假设我确保在mprotect调用后没有尝试写入分配的内存).

编辑:感谢您的所有答案.

一个后续问题 - 我正在计划使用shmget,但我认为它已经使用mm,因此仅限于较小的分配(请参阅本页的" 限制"部分).例如/proc/sys/kernel/shmmax,服务器上的32MB我正在使用这个.但我想要1GB的连续内存.我错了这个限制吗?

c linux shared-memory

7
推荐指数
1
解决办法
904
查看次数

PHP:相当于MySQL的函数SUBSTRING_INDEX?

我喜欢SUBSTRING_INDEXMySQL中的函数,特别是因为你可以使用负索引从字符串的右侧开始搜索.

在PHP中是否有相当于这个功能的东西?(或使用一些代码轻松实现)

php mysql substring

7
推荐指数
2
解决办法
6460
查看次数

从URL中提取主机名

我必须将网站名称修改为sql中的".com"或"co.in"

示例:假设我的站点地址为"http://stackoverflow.com/questions/ask?title=trim".我需要将结果作为"stackoverflow.com".

在某种情况下它可能像"www.google.co.in"然后我需要它是"google.co.in"

sql sql-server

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