小编Jim*_*imR的帖子

Python:构建LRU缓存

我有6,00,000 entries in MongoDB以下格式:

feature:category:count
Run Code Online (Sandbox Code Playgroud)

哪里

  • 功能可以是任何单词,
  • 类别是正面还是负面,并且
  • count表示特征在该类别的文档中出现的次数.

我想缓存前1000个元组,让我们说不要每次都查询数据库.

如何在Python中构建LRU缓存?或者有任何已知的解决方案吗?

python lru mongodb

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

如何使用任何形式的Windows API迭代长路径名

我在服务器上有一些超出MAX_PATH限制的文件.我一再听说你可以通过预先挂起的\\?\列出这些文件到路径.但是,这并没有解决问题FindFirstFile[Ex]及其合作伙伴,因为他们使用限制文件名长度的数据结构MAX_PATH.

有没有其他方法迭代目录结构,以找到名称太长的文件?我已经看过这样做的实用程序,但它们都没有以源代码形式提供.

请注意,我已经看到.NET BCL人员的博客条目,并按照他们提供的链接.

为了简单起见,我宁愿在C或C++中这样做,但现在任何可用的语言都可以.

我们赞赏代码,文档或任何有用的指针.

c windows winapi ntfs

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

Variadic模板问题

我有以下代码,我正在努力适应我自己的目的.这是一个学习练习,让我尝试更新我的C++技能.据我所知,这最初是用Clang 3.1编写的.

我尝试使用3.1到4.0和GCC 4.9到7.1的Clang版本进行编译,结果非常相似.

These are the error messages from GCC 5.1

Error 1: In instantiation of 'constexpr Struct<Fields>::Struct(T&& ...) [with T = {Struct<foo<int>, bar<double> >&}; Fields = {foo<int>, bar<double>}]':
<source>:46:12:   required from here

Error 2: <source>:28:61: error: mismatched argument pack lengths while expanding 'Fields'
 constexpr Struct(T &&...x) : Fields{static_cast<T&&>(x)}... {}
Run Code Online (Sandbox Code Playgroud)

如果你有耐心,请ELI5:P

你可以在godbolts编译器doohickey中看到这个:https://godbolt.org/g/2dRPXf

编辑:

鉴于@ Passer-By和@ Daniel-Jour的答案,我想知道是否Struct(Struct const &) = default;有必要.将删除此构造函数Struct具有我不知道或无法预见的效果(我不是C++ Swami!)?

构造函数constexpr Struct(T &&...x) : Fields{static_cast<T&&>(x)}... {}是一个很好的替代品,否则会产生Struct(Struct const &) = …

c++ templates variadic-templates c++11

6
推荐指数
1
解决办法
434
查看次数

iostreams很慢.有没有办法加快他们的速度?

现在,我一直在打开和关闭一个问题几天,列出超过Windows MAX_PATH限制的文件名.我正在使用Visual Studio 2008以及我能找到的所有补丁.时间由QueryPerformanceCounter和公司完成.

最新问题出现在以下代码中:

    start = getTime();
    for( vector<wstring>::iterator it = files.begin(); it != files.end(); ++it )
    {
#if USE_COUT
            wcout << setw( 6 ) << it->length() << L": " << *it << endl;  // 1
#else
            wstring x( *it );
            wprintf( L"%6.6d: %s\n", it->length(), x.c_str() );          // 2
#endif
    }
    stop = getTime();
Run Code Online (Sandbox Code Playgroud)

上面的循环遍历一个包含6755个条目的向量,平均字符串长度为256个字符.

通过wcout打印的代码大约需要52秒才能使用上面的循环显示向量.使用wprintf的代码在大约1.2秒内打印.

如果我最小化控制台窗口,则printf代码在大约500毫秒内运行,而wcout代码仍然需要大约40秒.

这些年来我真的很喜欢iostreams,但是......我一直在关注这个速度问题.在1993/1994年使用Borland OS/2编译器时,我们遇到了类似的问题,运行时使用sprintf在大约200毫秒内运行的strstream需要4到6个小时才能完成.

有什么建议让我改变我对iostreams的看法吗?


编辑:
所有关于潮红的谈话让我很好奇.
是不是\n在一个printf字符串中的功能相同,std::endl因为两者都会导致换行和刷新发送到输出?
IIRC,printf没有\n在某些操作系统上打印,直到填充缓冲区或刷新流,包括过去的Windows.
那么,如果wprintf( "%6.6d: %s\n", …

c++ windows iostream visual-c++

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

标签 统计

c++ ×2

windows ×2

c ×1

c++11 ×1

iostream ×1

lru ×1

mongodb ×1

ntfs ×1

python ×1

templates ×1

variadic-templates ×1

visual-c++ ×1

winapi ×1