问题标签 [resource-management]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java中的RAII ...资源处理总是那么难看吗?
我刚刚玩了 Java 文件系统 API,得到了以下函数,用于复制二进制文件。原始来源来自网络,但我添加了 try/catch/finally 子句以确保如果发生错误,缓冲流将在退出函数之前关闭(因此,我的操作系统资源被释放)。
我修剪了函数以显示模式:
据我了解,我不能将两者close()
放在 finally 子句中,因为第一个close()
可以很好地抛出,然后第二个不会被执行。
我知道 C# 有Dispose模式,可以用using
关键字处理这个问题。
我什至更清楚 C++ 代码应该类似于(使用类似 Java 的 API):
我遗漏了一些东西,还是我真的必须在 Java 中生成丑陋和臃肿的代码才能处理close()
缓冲流方法中的异常?
(请告诉我我在某个地方错了......)
编辑:是我,还是在更新此页面时,我看到问题和所有答案在几分钟内都减少了一点?是否有人在匿名时太享受自己了?
编辑 2:McDowell提供了一个非常有趣的链接,我觉得我不得不在这里提到:http: //illegalargumentexception.blogspot.com/2008/10/java-how-not-to-make-mess-of-stream.html
编辑 3:在 McDowell 的链接之后,我偶然发现了一个 Java 7 的提案,该提案类似于使用模式的 C#:http: //tech.puredanger.com/java7/#resourceblock。我的问题已明确描述。显然,即使使用 Java 7 do
,问题仍然存在。
java - 在哪里关闭 java PreparedStatements 和 ResultSets?
考虑代码:
上面没有编译,因为两者都PreparedStatement.close()
抛出ResultSet.close()
了java.sql.SQLException
. 那么我应该在 finally 子句中添加一个 try/catch 块吗?或者将 close 语句移到 try 子句中?或者只是不打扰打电话关闭?
programming-languages - 除了内存之外,是否有编程语言支持自动管理资源的示例?
自动内存管理的想法得到了新编程语言的大力支持。如果存在用于自动管理其他资源(如文件、网络套接字等)的概念,我很感兴趣?
java - 在 Java 中是否可以进行类似 C++ 的资源管理
在 C++ 中,我们有资源获取即初始化(RAII) 模式,它极大地简化了资源管理。这个想法是为任何类型的资源提供一些包装对象。包装对象的析构函数然后负责释放资源,当它超出其范围时。例如:
最常见的用法是智能指针。但是,还有许多其他类型的资源(文件、互斥体、套接字等)可以以完全相同的方式进行管理。
在 Java 中,不必担心内存管理。但所有其他类型的资源仍然存在。有finally块,但是它的使用相当不方便,尤其是当可以抛出许多不同的异常时。
所以,我的问题是,是否有任何 Java 模式提供与 C++ RAII 等效的功能?如果没有,请分享您在该领域的最佳实践(而不是 finally,除非它使用了一些复杂的方式)。
c++ - 理解术语和概念的含义 - RAII (Resource Acquisition is Initialization)
各位 C++ 开发人员能否给我们一个好的描述 RAII 是什么,为什么它很重要,以及它是否可能与其他语言有任何关系?
我知道一点。我相信它代表“资源获取就是初始化”。然而,这个名字与我(可能不正确)对 RAII 的理解不符:我的印象是 RAII 是一种在堆栈上初始化对象的方式,这样,当这些变量超出范围时,析构函数将自动被调用导致资源被清理。
那么为什么不称为“使用堆栈触发清理”(UTSTTC:)?你如何从那里到达“RAII”?
你怎么能在堆栈上做一些东西来清理堆上的东西呢?另外,是否存在不能使用 RAII 的情况?您是否曾经发现自己希望进行垃圾收集?至少一个垃圾收集器可以用于某些对象,同时让其他对象得到管理?
谢谢。
resource-management - 寻找“工作中的洗碗机”的解决方案
我正在寻找一种适用于“工作中的洗碗机”问题的算法。
虽然可以将脏咖啡杯等放入其中很棒,但您很快就会遇到“盘子的状态如何?” 困境。如果你走到厨房,你能从洗碗机里拿盘子,因为它们很干净,只是没有收起来吗?您可以将脏盘子放入洗碗机中,否则会使里面的干净盘子失效吗?
这似乎是一个必须具有编程等价物的问题。您有一个异步触发的共享进程,并将对象从一种状态移动到另一种状态。您需要能够在任何给定时间了解对象的状态。可以应用哪些算法?
我的开始选择是在“干净”和“脏”的洗碗机上创建一个翻转标志。当洗碗机清空时,必须切换到“脏”,运行时必须切换到“清洁”。该算法有问题吗?有没有更好/更不容易出错的?
注意:请不要使用轮询时间表的算法...
google-app-engine - 是否可以防止 Google App Engine 上的 DoSing?
我正在考虑为 Google App Engine 开发一个应用程序,它应该不会获得太多流量。我真的宁愿不支付超过免费配额的费用。但是,通过使应用程序过载并超出配额似乎很容易引起拒绝服务攻击。是否有任何方法可以防止或使其更难超过免费配额?例如,我知道我可以限制来自 IP 的请求数量(使其更难超过 CPU 配额),但有没有办法让超过请求或带宽配额更难?
asp.net - HttpContext.GetGlobalResourceObject 始终返回 null
我在 App_GlobalResources 文件夹中创建了两个文件:
两者都包含“SiteTitleSeparator”的值。
这是我正在尝试做的事情(以下行始终返回 null):
请注意,页面上的 Culture 属性已设置。
VB 和 C# 中的答案都将受到欢迎。
iphone - iPhone:有没有一种自动化的方法来识别未使用的资源?
当我开发我的应用程序时,我已经导入并合并了很多图像、声音等。我想我可以编写一个 greps 源代码的 shell 脚本,但我想知道是否存在可以识别任何我的项目中未使用的资源。
谢谢!
.net - I一次性链条
如果我使用 IDisposable 实现一个对象,拥有该对象的所有对象是否也应该实现它,即使它们没有其他资源可以释放?