小编cwi*_*ick的帖子

正确使用IDisposable接口

我从阅读MSDN文档中了解到,IDisposable接口的"主要"用途是清理非托管资源.

对我来说,"非托管"意味着数据库连接,套接字,窗口句柄等等.但是,我已经看到了Dispose()实现该方法以释放托管资源的代码,这对我来说似乎是多余的,因为垃圾收集器应该照顾那对你而言.

例如:

public class MyCollection : IDisposable
{
    private List<String> _theList = new List<String>();
    private Dictionary<String, Point> _theDict = new Dictionary<String, Point>();

    // Die, clear it up! (free unmanaged resources)
    public void Dispose()
    {
        _theList.clear();
        _theDict.clear();
        _theList = null;
        _theDict = null;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是否使得垃圾收集器可以使用的内存MyCollection比通常更快?

编辑:到目前为止,人们已经发布了一些使用IDisposable清理非托管资源(例如数据库连接和位图)的好例子.但是假设_theList在上面的代码中包含了一百万个字符串,并且你想现在释放那个内存,而不是等待垃圾收集器.上面的代码会实现吗?

.net c# garbage-collection idisposable

1586
推荐指数
12
解决办法
31万
查看次数

在Java中列出文件的最佳方法,按修改日期排序?

我想获取目录中的文件列表,但我想对其进行排序,使得最旧的文件是第一个.我的解决方案是调用File.listFiles,然后根据File.lastModified求助于列表,但我想知道是否有更好的方法.

编辑:我建议的当前解决方案是使用匿名比较器:

File[] files = directory.listFiles();

Arrays.sort(files, new Comparator<File>(){
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });
Run Code Online (Sandbox Code Playgroud)

java sorting file

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

签署C中的无符号转换 - 它总是安全吗?

假设我有以下C代码.

unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)

什么隐式转换在这里怎么回事,这是代码为安全的所有值ui?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)

c type-conversion

127
推荐指数
3
解决办法
16万
查看次数

从Linux访问Microsoft SQL Server有哪些方法?

我们有一台运行SQL Server 2005的Windows机器,我们需要能够从Linux机器上运行一些数据库查询.有哪些建议的方法可以做到这一点?理想情况下,我们需要一个类似于Windows上的sqlcmd的命令行实用程序.

sql-server

49
推荐指数
6
解决办法
9万
查看次数

如何从C/C++调用.NET程序集?

假设我正在用C++和C#编写应用程序.我想用C++编写低级部分并在C#中编写高级逻辑.如何从我的C++程序加载.NET程序集并开始调用方法并访问我的C#类的属性?

.net c# c++

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

从C API访问Python回溯

我在使用C API找出使用Python回溯的正确方法时遇到了一些麻烦.我正在编写一个嵌入Python解释器的应用程序.我希望能够执行任意Python代码,如果它引发异常,则将其转换为我自己的特定于应用程序的C++异常.目前,仅提取引发Python异常的文件名和行号就足够了.这是我到目前为止:

PyObject* pyresult = PyObject_CallObject(someCallablePythonObject, someArgs);
if (!pyresult)
{
    PyObject* excType, *excValue, *excTraceback;
    PyErr_Fetch(&excType, &excValue, &excTraceback);
    PyErr_NormalizeException(&excType, &excValue, &excTraceback);

    PyTracebackObject* traceback = (PyTracebackObject*)traceback;
    // Advance to the last frame (python puts the most-recent call at the end)
    while (traceback->tb_next != NULL)
        traceback = traceback->tb_next;

    // At this point I have access to the line number via traceback->tb_lineno,
    // but where do I get the file name from?

    // ...       
}
Run Code Online (Sandbox Code Playgroud)

在Python源代码中,我看到它们通过_frame结构访问当前帧的文件名和模块名,看起来它是一个私有定义的结构.我的下一个想法是以编程方式加载Python'traceback'模块并使用C API调用其函数.这样理智吗?有没有更好的方法从C访问Python回溯?

python

25
推荐指数
4
解决办法
9110
查看次数

如何判断任务是否已在django-芹菜中排队?

这是我的设置:

  • django 1.3
  • 芹菜2.2.6
  • django-celery 2.2.4
  • djkombu 0.9.2

在我的settings.py文件中

BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
Run Code Online (Sandbox Code Playgroud)

即我只是使用数据库来排队任务.

现在我的问题是:我有一个用户启动的任务,可能需要几分钟才能完成.我希望每个用户只运行一次任务,我会将任务的结果缓存在一个临时文件中,这样如果用户再次启动任务,我只需返回缓存的文件.我的视图函数中的代码如下所示:

task_id = "long-task-%d" % user_id
result = tasks.some_long_task.AsyncResult(task_id)

if result.state == celery.states.PENDING:
    # The next line makes a duplicate task if the user rapidly refreshes the page
    tasks.some_long_task.apply_async(task_id=task_id)
    return HttpResponse("Task started...")
elif result.state == celery.states.STARTED:
    return HttpResponse("Task is still running, please wait...")
elif result.state == celery.states.SUCCESS:
    if cached_file_still_exists():
        return get_cached_file()
    else:
        result.forget()
        tasks.some_long_task.apply_async(task_id=task_id)
        return HttpResponse("Task started...")
Run Code Online (Sandbox Code Playgroud)

这段代码几乎可行.但是当用户快速重新加载页面时,我遇到了问题.在任务排队和最终将任务从队列中拉出并提供给工作人员之间有1-3秒的延迟.在此期间,任务的状态仍为PENDING,这会导致视图逻辑启动重复任务.

我需要的是一些方法来判断任务是否已经提交到队列中,所以我最终不会提交两次.在芹菜中有这样做的标准方法吗?

django message-queue celery django-celery

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

在C中说"#define FOO FOO"有什么意义?

我遇到了一些C代码,其中作者在整个地方使用以下习语:

typedef __int32 FOO_INT32;
#define FOO_INT32 FOO_INT32
Run Code Online (Sandbox Code Playgroud)

这样做有什么意义?typedef不应该足够吗?对于一些不稳定的C编译器来说,这是一种解决方法吗?

c c-preprocessor

15
推荐指数
1
解决办法
805
查看次数

为什么在MySQL中删除此索引会加速我的查询100x?

我有以下MySQL表(简化):

CREATE TABLE `track` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(256) NOT NULL,
  `is_active` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `is_active` (`is_active`, `id`)
) ENGINE=MyISAM AUTO_INCREMENT=7495088 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

'is_active'列标记了我想在大多数但不是全部查询中忽略的行.我有一些查询定期从这个表中读取块.其中一个看起来像这样:

SELECT id,title from track where (track.is_active=1 and track.id > 5580702) ORDER BY id ASC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

此查询需要一分钟才能执行.这是执行计划:

> EXPLAIN SELECT id,title from track where (track.is_active=1 and track.id > 5580702) ORDER BY id ASC LIMIT 10;
+----+-------------+-------+------+----------------+--------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys  | key    | …
Run Code Online (Sandbox Code Playgroud)

mysql indexing

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

在Java中使用具有相同主机的多个SSL客户端证书

在我的Java应用程序中,我需要使用SSL连接到同一主机,但每次都使用不同的证书.我需要使用不同证书的原因是远程站点使用证书中嵌入的用户ID属性来标识客户端.

这是一个在3个不同操作系统上运行的服务器应用程序,我需要能够在不重新启动进程的情况下切换证书.

另一位用户建议将多个证书导入同一个密钥库.但是,我不确定这对我有帮助,除非有办法告诉Java使用密钥库中的哪个证书.

java ssl certificate

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

无法将Django应用程序部署到Heroku:未定义名称"install"

编辑:我将问题缩小到requirements.txt文件中"distribute == 0.6.10"行的存在.删除该行可以解决问题,并且还没有遇到来自该行的任何错误.

我在这里按照教程:http://devcenter.heroku.com/articles/django

一切进展顺利,直到我进入名为"跑一个工人"的部分.我的requirements.txt文件中有以下内容:

Django==1.3
amqplib==1.0.1
anyjson==0.3.1
celery==2.3.3
distribute==0.6.10
django-celery==2.3.3
django-kombu==0.9.4
django-picklefield==0.1.9
gunicorn==0.12.2
kombu==1.4.1
psycopg2==2.4.2
pyparsing==1.5.6
python-dateutil==1.5
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)

我按照说明中的说明将适当的芹菜配置添加到我的Procfile和settings.py的末尾.部署应用程序时,我收到以下错误:

          Relaunching...
           Traceback (most recent call last):
             File "<string>", line 1, in <module>
           NameError: name 'install' is not defined
           Complete output from command /tmp/build_2o84wdweodb97/bin/python2.7 -c "import setuptools;__file__='/tmp/build_2o84wdweodb97/build/distribute/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-LIti3K-record/install-record.txt --install-headers /tmp/build_2o84wdweodb97/include/site/python2.7:
Run Code Online (Sandbox Code Playgroud)

完整的部署日志可以在这里找到:http://pastie.org/2609107

有人以前见过这个或者知道如何解决这个问题吗?

python django heroku

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