小编Fir*_*cer的帖子

使用可变项创建两遍PHP缓存系统

我想实现一个两遍缓存系统:

  • 第一遍生成一个PHP文件,其中包含硬编码的所有常见内容(例如新闻项).然后数据库有一个缓存表来链接这些页面(例如"index.php page = 1 style = default"),数据库还存储一个uptodate字段,如果为false则导致第一次传递在下一次页面重新运行被观看了.

  • 第二遍填写次要细节,例如多久以前的东西(?),以及可变项目,例如"你以......登录".

但是,我不确定一个有效的实现,它支持缓存和非缓存(例如,搜索)页面,没有大量的代码和几个查询.

现在每次加载页面时,PHP脚本都会重新生成页面.对于像搜索这样的页面,这很好,因为大多数搜索是不同的,但对于其他页面,例如索引,这对于每个命中几乎是相同的,但是生成大量查询并且是相当长的脚本.

问题是页面的某些部分会根据每个用户进行更改,例如"您已登录为..."部分,因此只需保存生成的页面仍然会产生10,000个几乎相同的页面.

主要关注的是减少服务器上的负载,因为我在共享主机上并且此时无法承受升级,但是该站点正在使用相当大一部分服务器CPU +对MySQL进行公平加载服务器.

所以基本上最小化每个页面请求需要做多少,而不是像索引那样一直是一个好的开始,而不是重新生成像索引上的新闻一样的东西.

我实际上认为将新闻项目硬编码为纯HTML,但这意味着在几个地方维护它们(因为它们可能用于搜索,而评论在专用于该新闻项目的页面上(即news.php)等) .

php caching

5
推荐指数
1
解决办法
1611
查看次数

C# - 是否有32位浮点数学库?

我打算用c#而不是c ++(使用SlimDX)来完成我的下一个项目.

所有directX都使用浮点数,但System.Math使用双精度数.这意味着不断在浮动和双打之间进行转换.

理想情况下,我想使用浮点数编写所有代码,因为无论如何我都没有获得任何额外的精度从双打转换为浮点数...

但是我一直无法为使用浮点数的.net找到一组数学函数.我当然可以在c#中编写我自己的库,但是我更喜欢使用已经优化的现有库...

c# math floating-point

5
推荐指数
1
解决办法
3439
查看次数

C++:Dll卸载问题

如何确保dll在其中存在任何对象时不会被卸载?

问题是,当我使用explict内存管理时,我可以在释放dll之前删除dll对象,但是使用智能指针我无法控制它们被破坏的顺序,这意味着dll可能会在尝试释放时首先释放导致崩溃其他一个对象:

FlPtr是一个简单的引用计数类,可根据需要调用AddRef和Release

ExampleDll *dll = LoadDll(L"bin\\example.dll");
IObject *obj = dll->CreateObject();
...
obj->Release();
delete dll;//fine because all objects already deleted
return 0;

auto_ptr<ExampleDll> dll = LoadDll(L"bin\\example.dll");
FlPtr<IObject> obj = dll->CreateObject();
...
return 0;//crash if dll is destructed before obj since Object::Release needs to call into the dll
Run Code Online (Sandbox Code Playgroud)

我试着让dll句柄自己卸载,即只删除所有对象后卸载.这项工作是通过创建一个dll实现的新对象IExampleDll.这就像之前的ExampleDll对象一样,但它位于dll而不是exe中,并且也是refrence计数的.dll中的每个对象都会增加对构造的依赖,并在破坏时将其减去.这意味着当exe释放它的引用并且所有dll对象都被破坏时,引用计数才会达到零.然后删除它自己在析构函数中调用FreeLibrary(GetModuleHandle()).

然而,这在FreeLibrary中崩溃了,因为线程仍然在正在卸载的dlls代码中...

我现在不知道如何确保只在没有剩余对象的情况下卸载dll,除了在其他所有内容都应该删除之后再显示释放dll;

int main()
{
    ExampleDll *dll = LoadDll("bin\\example.dll");
    restOfProgram();
    delete dll;
}
Run Code Online (Sandbox Code Playgroud)

当需要在程序中间加载/卸载dll时,即当用户在选项中从d3d更改为openGL时,这种方法变得困难.

c++ dll

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

Python c-api 和 unicode 字符串

我需要在 python 对象和各种编码的 c 字符串之间进行转换。使用 PyUnicode_Decode 从 ac 字符串到 unicode 对象相当简单,但是我不知道如何走另一条路

//char* can be a wchar_t or any other element size, just make sure it is correctly terminated for its encoding
Unicode(const char *str, size_t bytes, const char *encoding="utf-16", const char *errors="strict")
    :Object(PyUnicode_Decode(str, bytes, encoding, errors))
{
    //check for any python exceptions
    ExceptionCheck();
}
Run Code Online (Sandbox Code Playgroud)

我想创建另一个函数,它接受 python Unicode 字符串并使用给定的编码将其放入缓冲区中,例如:

//fills buffer with a null terminated string in encoding
void AsCString(char *buffer, size_t bufferBytes,
    const char *encoding="utf-16", const char *errors="strict")
{
    ... …
Run Code Online (Sandbox Code Playgroud)

c python python-c-api

5
推荐指数
1
解决办法
3522
查看次数

创建一个新的基本类型

有没有办法创建一个类似于基本类型之一的新类型(例如char),并且可以在它们之间进行有意义的转换,但是会在模板中进行不同的解析,例如,以下代码有效吗?

typedef char utf8;
template<typename T>void f(T c);
template<> void f<char>(char c)
{
    std::cout << "ascii " << c << std::endl;
}
template<> void f<utf8>(utf8 c)//error C2766: explicit specialization; 'void f<char>(char)' has already been defined
{
    std::cout << "utf8 " << c << std::endl;
}
int main()
{
    char c1 = 'x';
    utf8 c2 = 'g';
    f(c1);
    f(c2);
}
Run Code Online (Sandbox Code Playgroud)

我认为有可能使用包含单个数据成员的类,如果是这样,最简单的方法是什么,并且编译器能够优化它,就像它是原始的一样.

编辑:我尝试了BOOST_STRONG_TYPEDEF,这似乎适用于基本的东西,但我怎么能从新类型创建一个std :: basic_string?

BOOST_STRONG_TYPEDEF(char,utf8);
//first try
BOOST_STRONG_TYPEDEF(std::string,utf8_string);
//second try
typedef std::basic_string<utf8, std::char_traits<utf8>,std::allocator<utf8> > uft8_string;
Run Code Online (Sandbox Code Playgroud)

第一个没有真正起作用,因为结果类型仍然期望其所有方法的char,而第二个似乎不喜欢构造函数和赋值运算符的存在:(

我还没有尝试过另一种方法来创建新的char类型,如果我不能使用BOOST_STRONG_TYPEDEF,它是否可以解决这个问题?

c++ templates typedef template-specialization

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

Java:处理多个复杂接口而无需重复代码

我正在使用Java API,这需要我实现许多相当大的接口。但是,通常在实现之间实际上只有一两个细节有所不同,因此我制作了一些抽象基类来提供大多数实现。

但是,现在我遇到了需要从其他一些类扩展和/或实现多个此类接口的情况,因此我无法扩展我的抽象基类。

在C ++中,我可以使用多重继承,还可以使用下面的其他技巧。但是,Java不允许多重继承,也不允许以这种方式使用泛型。

class MyClass : public HelperForInterfaceA, public HelperForInterfaceB {...};
class template<class BASE> MyHelper : public BASE {...};
Run Code Online (Sandbox Code Playgroud)

我现在最好的想法是将抽象帮助程序类的具体实现作为一个字段,然后将所有接口方法转发到该字段实例,而该字段引用了主要对象以实现最后的细节如果需要的话。

class MyClass extends A implements IB, IC {
    private static class B extends BAbstractHelper {
        private A a;
        public B(A a, int size) {
            super(size);
            this.a = a;
        }

        @Override
        public boolean foo(int x, int y) {
            return a.foo(x, y);
        }
    }
    private static class C extends CAbstractHelper {
        ...
    }


    private B b;
    private C c;
    private …
Run Code Online (Sandbox Code Playgroud)

java inheritance interface multiple-inheritance

5
推荐指数
1
解决办法
247
查看次数

std :: u32string转换为/从std :: string和std :: u16string

我需要为不同的API /模块在UTF-8,UTF-16和UTF-32之间进行转换,因为我知道可以选择使用C++ 11查看新的字符串类型.

它看起来像我可以使用string,u16stringu32string为UTF-8,UTF-16和UTF-32.我还发现codecvt_utf8codecvt_utf16这一下就能够做到之间的转换char或者char16_tchar32_t什么看起来像一个较高的水平wstring_convert,但只出现与字节/工作std::string和文件不是很大.

我是不是想以wstring_convert某种方式使用UTF-16↔UTF-32和UTF-8↔UTF-32机箱?我只是真的找到了UTF-8到UTF-16的例子,我甚至不确定它在Linux上wchar_t通常被认为是UTF-32 是正确的......还是直接用那些代码解析器做一些更复杂的事情?

或者这仍然没有真正处于可用状态,我应该坚持使用8,16和32位无符号整数的现有小程序?

c++ linux windows unicode c++11

5
推荐指数
1
解决办法
6523
查看次数

具有整数键的 C++ 高效且紧凑的映射

我有 200 组大约 50,000 个范围在 0 到 500,000 之间的唯一整数,我需要映射到另一个小值(一对整数,值不相关,因此不需要按需计算)。

我尝试使用 std::unordered_maps,这使用了大约 50MB(在 VS2015 堆诊断工具中测量),虽然性能很好,但我希望降低此内存使用量(打算成为一些小型 500MB 云服务器上的后台服务) 。

实际上我的初始版本是 200 个单独的std::unordered_map<int, std::pair<int, int>>.

一种选择似乎是排序数组并使用二分搜索,但还有其他选择吗?

c++ optimization data-structures

5
推荐指数
1
解决办法
4531
查看次数

Align list item numbers with surrounding paragraphs

列表项可能包含几个段落、图像等。它们都应该位于项目编号的右侧。

#page {
  width: 200px;
}

li {
  margin: 1em 0;
}
ol {
  padding: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div id="page">
  <p>Some text</p>
  <ol>
    <li>A list item</li>
    <li>A multiline list item another line</li>
    <li>
      <p>A list item containing blocks such as example images:</p>
      <div style="width:128px;height:48px;background:#CCC">Example<br/>Image</div>
    </li>
  </ol>
  <p>Some more text</p>
</div>
Run Code Online (Sandbox Code Playgroud)

期望的结果

理想情况下,我更愿意保留列表标签,而不是使用表格或其他一组定位的通用块。

html css

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

使用接近最大基础整数值的哨兵指针值是否安全?

我正在看一些代码,除了空指针之外,还使用了一些特殊值,例如(T*)-1,如果某些“创建”函数失败,通常将它们用作返回值。

如果所指向的类型足够大,以至于((T*)-n) + sizeof(T)会溢出,则意味着该地址实际上无法分配给类型T的实例,这样可以吗?编译器可以看到类似的东西if (ptr == (T*)-1),确定不可能并对其进行优化吗?

c pointers

5
推荐指数
1
解决办法
60
查看次数